java IO流 之 其他流

一、内存操作流(ByteArrayInputStream、ByteArrayOutputStream)

(一)、   public class ByteArrayInputStream extends InputStream;

ByteArrayInputSteam:该类是InputStream的子类,它从内存中的字节数组中读取数据,因此它的数据源是一个字节数组。这个类的构造方法包括: 
     ByteArrayInputStream(byte[] buf)--------参数buf指定字节数组类型的数据源。 
     ByteArrayInputStream(byte[] buf, int offset, int lenght)-----参数buf指定字节数组类型数据源,参数offset指定从数组中开始读取数据的起始下标位置,lenght指定从数组中读取的字节数。 
     ByteArrayInputStream类本身采用了适配器设计模式,它把字节数组类型转换为输入流类型,使得程序能够对字节数组进行读操作。

public static void byteArrTest() throws IOException{
        ByteArrayInputStream bis=new ByteArrayInputStream("abcd".getBytes());
        int len=0;
        while((len=bis.read())!=-1){
            System.out.println((char)len+"<=>"+len);
        }
        bis.close();
    }

(二)、public class ByteArrayOutputStream extends OutputStream。

ByteArrayOutputStream:此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray()toString() 获取数据。关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException

1、public byte[] toByteArray()创建一个新分配的 byte 数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中

    public static void byteArrOut() throws IOException{
        ByteArrayOutputStream bos=new ByteArrayOutputStream();
        bos.write(97);
        bos.write(new byte[]{98,99,100});
        //public byte[] toByteArray()创建一个新分配的 byte 数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中。
        byte [] bys=bos.toByteArray();
        for(byte b:bys){
            System.out.println(b+"<==>"+(char)b);
        }
    }

2、public String toString()使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串。新 String 的长度是字符集的函数,因此可能不等于缓冲区的大小。

public static void byteArrOut2() throws IOException{
        ByteArrayOutputStream bos=new ByteArrayOutputStream();
        bos.write(97);
        bos.write(new byte[]{98,99,100});
        //public String toString()使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串。新 String 的长度是字符集的函数,因此可能不等于缓冲区的大小。
        String str=bos.toString();
        System.out.println(str);//abcd
    }

(三)、ByteArrayInputStream、ByteArrayOutputStream一起使用

public static void byteArrOut() throws IOException{
        ByteArrayOutputStream bos=new ByteArrayOutputStream();
        bos.write(97);
        bos.write(new byte[]{98,99,100});
        byte [] bys=bos.toByteArray();
        ByteArrayInputStream bis=new ByteArrayInputStream(bys);
        int len=0;
        while((len=bis.read())!=-1){
            System.out.print((char)len);//abcd
        }
    }

二、打印流(PrintStream,PrintWriter)

PrintStream是FilterOutputStream的子类。

PrintWriter 是 Writer的子类。

打印流的特点:
 *   A:只有写数据的,没有读取数据。只能操作目的地,不能操作数据源。打印流只有字节打印流PrintStream 与字符打印流PrintWriter
 *   B:可以操作任意类型的数据。他们的print()系列方法与println()系列方法可以操作任意类型数据。
 *   C:如果启动了自动刷新,能够自动刷新。但必须调用println()方法

PrintWriter pw = new PrintWriter(new FileWriter("pw2.txt"), true);

PrintStream ps=new PrintStream(new FileOutputStream("a.txt"),true);
 *   D:该流是可以直接操作文本文件的。

public PrintStream(File file)  throws FileNotFoundException。

public PrintWriter(File file)  throws FileNotFoundException。

1、使用PrintStream实现文件的copy

public static void streamCopy() throws IOException{
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("a.txt"));
        //public PrintStream(OutputStream out,boolean autoFlush)使用该够造函数 开启自动刷新功能
        PrintStream ps=new PrintStream(new FileOutputStream("Copy.java"),true);
        byte [] bys=new byte[1024];
        int line =0;
        while((line=bis.read(bys))!=-1){
            ps.println(new String(bys,0,line));
        }
        ps.close();
        bis.close();
    }

2、使用 PrintWriter实现文件的copy

public static void copy() throws IOException{
        BufferedReader br = new BufferedReader(new FileReader("a.txt"));
        // 封装目的地
        //public PrintWriter(OutputStream out,boolean autoFlush);使用该够造函数 开启自动刷新功能
        PrintWriter pw =new PrintWriter(new FileWriter("Copy.java"), true);
        String line = null;
        while((line=br.readLine())!=null){
            pw.println(line);
        }
        pw.close();
        br.close();
    }

三、标准输入输出流(public final class System)

System类中的三个成员变量

        //“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
        public final static InputStream in = null;
        //“标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
        public final static PrintStream out = null;
        //“标准”错误输出流。此流已打开并准备接受输出数据。 通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标
        public final static PrintStream err = null;

由System.out变量我们可以:

       // 有这里的讲解我们就知道了,这个输出语句其本质是IO流操作,把数据输出到控制台。
        System.out.println("helloworld");
        // 获取标准输出流对象
        PrintStream ps = System.out;
        ps.println("helloworld");
时间: 2024-10-10 17:49:04

java IO流 之 其他流的相关文章

JavaLearning:JAVA IO 之内存操作流

package org.fun.io; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; public class ByteArrayDemo { public static void main(String[] args) { String str = "helloworld";// 定义字符串,全部由小写字母组成 ByteArrayOutputStream bos = null;//

java IO 四(转换流的使用)

扯点别的: 随着年龄的慢慢增长,有些道理才明白,有些爱才感慨.家人或许希望你能立足大城市,开创一番事业.但是在内心里家人永远希望你多花点时间陪陪他们,一起吃吃饭,说说话,只要你平平安安,生活快乐,家人就感到幸福.所以多花点时间陪陪父母.陪陪爱人.陪陪孩子. 又搁置了不短的时间,继续写java io的知识,现在感觉自己的记忆力真的不行了,总是记不住东西,哎,关键还是理解不够深入,靠死记硬背是不行的看样.开搞.参考自毕向东老师的视频 第一: InputStreamReader 看看JDK里面的解释,

JAVA IO 字节流与字符流

文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节.       IO框架 从上图我们可以看出IO可以分为两大块 字节流和字符流 字节流是 InputStream 和 OutputStream 分别对应输入与输出 字符流是Reader和Writer分别对应输入与输出        ByteArrayInputStream  它字节数组输入流.继承于InputS

Java IO 字节流与字符流 (二)

概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 字节流的抽象基类 InputStream,OuputStream 字符流的抽象基类 Reader,Writer 注: 这些基类的子类都是以基类的名称结尾的,如FileReader,FileInputStream 字节流 字节流:以字符为导向的流 简单介绍一个例子,演示字节流对图片的复制 1: imp

Java IO 字节流与字符流 (三)

Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中.而字符流操作的最小单位则是字符.可以先看一下IO流的概述: 下面首先是通过字符流对文件进行读取和写入: 1 package lib; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileNotFou

java io 学习之三 字符流的缓冲区

 /** 字符流的缓冲区 缓冲区的出现,提高了对数据的读写效率 对应的类: BufferedWriter BufferedReader 缓冲区要结合流才可以使用 缓冲区是在流的基础上对流的功能进行增强 软件的优化可以分为:设计优化和性能优化 设计优化:对代码进行重构,让代码实现更强的可扩展性和灵活性,复用性. 提高性能最常用的的手段是:缓冲区  线程池 BufferedWriter 构造方法摘要 BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输

Java IO 技术之基本流类

流式IO 流(Stream)是字节的源或目的.         两种基本的流是:输入流(Input Stream)和输出流(Output Stream).可从中读出一系列字节的对象称为输入流.而能向其中写入一系列字节的对象称为输出流. 流的分类 节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域. 过滤流:使用节点流作为输入或输出.过滤流是使用一个已经存在的输入流或输出流连接创建的. InputStream 三个基本的读方法       abstract int read() :读取一个字

java.io 字节流与字符流及简单实例

java io是java中非常基础的知识点,对于通信和不涉及到数据库的项目java io应该是要经常使用.java io分为字节流和字符流,分清字节流和字符流的异同是掌握java io的起点. 字节流,最小单位是字节,通信协议中的X-MODEM和Y-MODEM协议传输单位就是字节流.java io中与字节流相关的主要类有:InputStream,OutputStream,FileInputStream,FileOutputStream.与字符流有关的主要类有:Writer,Reader,File

java IO(三):字符流

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

JAVA IO ( 两种打印流 )

<!--字符打印流--> public class CharDemo { public static void main(String[] args) throws Exception { // 创建字符打印流 PrintWriter p = new PrintWriter(new FileWriter(new File("src/打印流_输出流/text.txt"), true)); p.print("黄伟强"); p.println(); p.pri