OutputStream、OutputStreamReader、BufferedWriter、InputStream、InputStreamReader、BufferedReader 之间的关系梳理

OutputStream(字节输出流)、OutputStreamReader(字符输出流)、BufferedWriter(缓冲方式)、InputStream(字节输入流)、InputStreamReader(字符输入流)、BufferedReader(读取缓冲方式) 

 概述:

众所周知在计算机中通讯和存储数据都是以二进制为单位的,0或者1,其中0或者1所占的位置叫做位 1字节(byte)=8位(bit)=8个二进制位 ,通常所说的汉字占2个字节,可以理解为 1汉字=2字节=16位

1B = 1024bit

1Kb = 1024*1024bit

1Mb = 1024*1024*1024bit

明白上述概念再说下面的内容;

       OutputStream是输出流的父类

      InputStream 是输入流的父类

InputStream  InputStreamReader 区别

 InputStream  OutputStream 是字节流所以在输出的时候需要考虑  String转为byte  然后byte转为String

 InputStreamReader  OutputStreamReader 是字符流 输出的时候不需要考虑互相转换 直接就可以输出String

字节流直接操作文件本身,字符流则是针对内存开辟一个缓冲区

什么是缓冲区?为什么要做缓冲区?

 缓冲区通俗来说就是一个暂时存储数据的容器,比如你频繁操作一个文件或者查询数据库数据,肯定影响性能,但是如果你开辟一个缓冲区,将之前查到的数据存在内存中,下次直接在内存读取,速度会快很多。缓冲区就跟这个概念差不多,将读取到的数据先全部放在缓冲区内,等到flush()或者close() 在统一输出到文件中去。

代码演示

InputStream实现一个字节一个字节的读取,而InputStreamReader是升级版实现一个字符一个字符的读取,BufferedReader再次升级实现一行一行的读取;

同理 OutputStream相反,并且OutputStream是直接操作文件,运行完文件直接就出现内容,但是OutputStreamReader则是作用与内存

/**
 * 创建字节输出流并且写完后不关闭流
 */
public class demo {
    public static void main(String[] args) throws Exception{
        //字节流写数据 并且不关闭输出流
        OutputStream outputStream = new FileOutputStream(new File("D:\\tjbh项目\\2222.txt"));
        byte[] b = "1234567".getBytes("UTF-8");
        outputStream.write(b);
    }
}

 可以看到没有关闭流运行完直接就可以看到内容

如果使用字符流

/**
 * 创建字符输出流并且写完后不关闭流
 */
public class demo {
    public static void main(String[] args) throws Exception{
        //字符流写数据 并且不关闭字符流
         OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(new File("D:\\tjbh项目\\1111.txt")));
         writer.write("12345");
    }
}

可以看到并没有在文件中显示内容,说明现在数据还都在缓冲区内,这时候只要close()或者 flush()  就可以将数据存到文件中

/**
 * 关闭流
 */
public class demo {
    public static void main(String[] args) throws Exception{
        //字符流写数据 并且不关闭字符流
         OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(new File("D:\\tjbh项目\\1111.txt")));
         writer.write("12345");
         writer.close();
    }
}

 BufferedReader 与 BufferedWriter 区别

 只有这几个方法,无法实现一行一行的读取,那么就用到了BufferedReader

/**
 * 一行一行的读取
 */
public class demo {
    public static void main(String[] args) throws Exception{
        InputStream inputStream = new FileInputStream(new File("D:\\tjbh项目\\1111.txt"));
        InputStreamReader reader = new InputStreamReader(inputStream);
        BufferedReader bufferedReader = new BufferedReader(reader);
        String data = "";
        while ((data = bufferedReader.readLine())!=null){
            System.out.println(data);
        }
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值