JAVA字节流、字符流、缓冲流、转换流、内存流、字符编码( 二 )

  • BufferedOutputStream:代表“缓冲区” , 可以将数据暂存在缓冲区 , 使用它可以防止每次都进行实际的写操作;可以使用flush()方法将缓冲区数据一次性写出;
  • 同样 , 在Reader 和 Writer中也提供了与之对应的类 , 详细如下:
    JAVA字节流、字符流、缓冲流、转换流、内存流、字符编码

    文章插图
    文件过滤器 子类
     
    字节流字节流又分字节输入流(InputStream)和字节输出流(OutputStream) , 分别对应读和写;
    字节输入流:FileInputStream , 字节输入流的使用案例代码如下:
    import java.io.*;/** * 案例:使用字节流完成文件拷贝任务 。*/public class StreamCopyDemo {public static void main(String[] args) throws Exception {// 分别创建文件的源对象和目标对象File src = https://www.isolves.com/it/cxkf/yy/JAVA/2020-05-03/new File("stream.txt");File target = new File("stream_copy.txt");// 创建输入和输出管道InputStream in = new FileInputStream(src);OutputStream out = new FileOutputStream(target);// 读取/写出数据byte[] buffer = new byte[1024]; // 设置每次读取的字节数int len = -1; // 读取到的字节总数while ((len = in.read(buffer)) != -1) {// 写出数据out.write(buffer, 0, len);}// 关闭输入/输出管道in.close();out.close();}}字节输入流在读取数据时使用的是read()方法 , 该方法还有另外的重载方法:
    void read(int b); // 读取单个字节void read(byte[] b); // 读取多个字节 , 并存储到(byte[] b)中void read(byte[] b, int off, int len); // 读取多个字节 , 并存储到(byte[] b)中 , 从数组b的off索引为止开始存储 
    字节输出流:FileOutputStream , 字节输出流的使用案例代码如下:
    import java.io.*;/** * 案例:使用字节流完成文件拷贝任务 。*/public class StreamCopyDemo {public static void main(String[] args) throws Exception {// 分别创建文件的源对象和目标对象File src = https://www.isolves.com/it/cxkf/yy/JAVA/2020-05-03/new File("stream.txt");File target = new File("stream_copy.txt");// 创建输入和输出管道InputStream in = new FileInputStream(src);OutputStream out = new FileOutputStream(target);// 读取/写出数据byte[] buffer = new byte[1024]; // 设置每次读取的字节数int len = -1; // 读取到的字节总数while ((len = in.read(buffer)) != -1) {// 写出数据out.write(buffer, 0, len);}// 关闭输入/输出管道in.close();out.close();}}与字节输入流在读取数据时使用的read()方法相对应的 , 字节输出流也提供了对应的写出数据的方法:write() , 该方法也有一些重载方法:
    out.write(int b); // b 写入文件的字节out.write(byte[] b); // b 要写入文件的数据 , 类型为byte数组out.write(byte[] b, int off, int len); // 把字节数组中的从off索引开始的len个字节写到文件中注意:字节流读写中的数据类型是字节数据类型(byte[]) 。
     
    案例1 , 使用字节流完成文件拷贝任务 。
    import java.io.*;/** * 案例:使用字节流完成文件拷贝任务 。*/public class StreamCopyDemo {public static void main(String[] args) throws Exception {// 分别创建文件的源对象和目标对象File src = https://www.isolves.com/it/cxkf/yy/JAVA/2020-05-03/new File("stream.txt");File target = new File("stream_copy.txt");// 创建输入和输出管道InputStream in = new FileInputStream(src);OutputStream out = new FileOutputStream(target);// 读取/写出数据byte[] buffer = new byte[1024]; // 设置每次读取的字节数int len = -1; // 读取到的字节总数while ((len = in.read(buffer)) != -1) {// 写出数据out.write(buffer, 0, len);}// 关闭输入/输出管道in.close();out.close();}} 
    字符流字符流又分字符输入流(Reader)和字符输出流(Writer) , 分别对应文件读和写;需要注意的是:字符流读写中的数据类型是字符数据类型(char[]) , 区别于字节流中的字节类型(byte[]) 。
    字符输入流 , FileReader , 字符输入流的使用案例代码如下:
    import java.io.File;import java.io.FileReader;import java.io.Reader;/** * 文件的字符输入流案例 */public class FileReaderDemo {public static void main(String[] args) throws Exception {// 创建资源对象File src = https://www.isolves.com/it/cxkf/yy/JAVA/2020-05-03/new File("file_reader.txt");// 创建文件字符输入流Reader reader = new FileReader(src);char[] buffer = new char[1024]; // 每次读取1024个字符int len = -1; // 当前读取到的字符长度while ((len = reader.read(buffer))!= -1) {String line = new String(line, 0, len);System.out.println(line);}// 关闭字符输入流reader.close();}}


    推荐阅读