Java流

作者: 抬头挺胸才算活着 | 来源:发表于2020-04-23 21:10 被阅读0次

参考资料:
[1]. 传智黑马IDEA版本2019Java教学视频---多线程与IO流

字节流与字符流

字节不涉及编码,只是一堆二进制;
字符需要在字节的基础上用某种编码规范,将字节(人类看不懂)解码为字符(人类看得懂)的。


字节流FileOutputStream创建文件

字节流子类
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Stream {
    public static void main(String[] args) throws IOException {
        // FileOutputStream的构造器可以输入文件名字或者输入文件路径
//        FileOutputStream fos = new FileOutputStream(".\\a.txt");
        FileOutputStream fos = new FileOutputStream(new File(".\\a.txt"));

        fos.write(97);
        fos.write('b');
        fos.write("\r\n".getBytes());
        fos.write("你好".getBytes());
        fos.close();
    }
}

FileInputStream读取文件

注意,为了正确地显示,需要将读取出来的字节转化为字符串或者字符。

    private static String readFile(String filename) throws IOException {
        FileInputStream fis = new FileInputStream(filename);
        byte[] buff = new byte[1024];
        int len = fis.read(buff);
        fis.close();
        return new String(buff, 0, len);
    }

文件复制

    private static void copyFile(String from, String to) throws IOException {
        FileInputStream fis = new FileInputStream(from);
        FileOutputStream fos = new FileOutputStream(to);

        byte[] buff = new byte[1024];
        while(true){
            int len = fis.read(buff);
            if(len==-1){
                break;
            }else{
                fos.write(buff, 0, len);
            }
        }

        fis.close();
        fos.close();
    }

FileReader

继承:FileReader->InputStreamReader(这个涉及编码,后面讲)->Reader。
FileReader对比InputStreamReader的区别是:前者读取的是一个个的字符,后者是一个个的字节。
FileReader底层使用FileInputStream来读取字节流!!

    public FileReader(String fileName) throws FileNotFoundException {
        super(new FileInputStream(fileName));
    }
    private static String readFile2(String filename) throws IOException {
        FileReader fr = new FileReader(filename);
        char[] buff = new char[1024];
        int len = fr.read(buff);
        fr.close();
        return new String(buff, 0, len);
    }

FileWriter

继承:FileWriter->OutputStreamWriter(这个涉及编码,后面讲)->Writer
FileWriter对比FileOutputStream除了字符和字节的区别区别外,FileWriter在写入的时候先把字符转化为字节写入到内存缓存区中,然后再flush到硬盘,如果不调用flush或者close的话,不会写入到硬盘中去。

缓存流(buffered)

对上面四种基本的流进行一种增强,会创建一个内置的默认大小的缓存区数组,通过缓存区读写,减少系统IO次数。
命名规律:在增强的流类型的基础上加上Buffered
字节缓存流:BufferedInputStream,BufferedOutputStream
字符缓存流:BufferedReader,BufferedWriter

BufferedOutputStream

继承:BufferedOutputStream->OutputStream
创建的时候需要指定输出流,写入之后,需要调用flush或者close刷新到磁盘。

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("1.txt"));
bos.write("你好".getBytes());
bos.flush();
bos.close();

编码流

  • OutputStreamWriter:是字符通向字节的桥梁,构造参数的类型是OutputStream,OutputStreamWriter负责将字符转化为字节,OutputStream负责将字节写入到其他地方。实际上OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("1.txt"), "utf-8");就相当于FileWriter。
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("1.txt"), "utf-8");
osw.write("你好");
osw.flush();
osw.close();
  • InputStreamReader:是字节通向字符的桥梁

两种编码的转化

    void GBK2UTF8(String from, String to) throws IOException{
        InputStreamReader isr = new InputStreamReader(new FileInputStream(from), "GBK");
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(to), "UTF-8");
        int ch;
        while((ch = isr.read())!=-1){
            osw.write(ch);
        }
        isr.close();
        osw.close();
    }

相关文章

  • Java之IO流详解

    title: Java之IO流详解tags: Java IO流categories: Java IO流 大多数应用...

  • Kotlin I/O 与文件管理(1)Java I/O 流概述

    Java I/O 流概述Java 流设计理念Java 流类继承层次字节输入流字节输出流字符输入流字符输出流   K...

  • IO流

    # Java 流式输入 输出原理 # Java 流的分类 # 输入 输出 流 类 # 常见的节点流 和 处理流 #...

  • java IO流

    java IO流 java流操作的类和接口 java流类图结构 IO流的定义 流是一组有顺序的,有起点和终点的字节...

  • Java新特性之Java8的那些事儿-Stream

    什么是流? ​ Java Se中对于流的操作有输入输出IO流,而Java8中引入的Stream 属于Java ...

  • IO系统

    内容梗概: Java流式输入/输出的原理 Java流类的分类 输入/输出流类 常见的节点流和处理流 文件流 缓冲流...

  • Java互联网架构-一篇文精通JDK8lambada表达式

    一、流的概念 Java Se中对于流的操作有输入输出IO流,而Java8中引入的Stream 属于Java API...

  • 05-Java中的IO与NIO面试题(15题)

    1、Java 中 IO 流? Java 中 IO 流分为几种?按照流的流向分,可以分为输入流和输出流;按照操作单元...

  • 从0开始复习java(9)--IO

    Java的io通过java.io包下的类和接口支持。主要有输入、输出流,又分为字节流和字符流。Java的io流使用...

  • 28、说说Java 中 IO 流

    说说Java 中 IO 流 Java 中 IO 流分为几种? 1、按照流的流向分,可以分为输入流和输出...

网友评论

      本文标题:Java流

      本文链接:https://www.haomeiwen.com/subject/ssgoihtx.html