IO流和缓存流的区别

IO流和缓存流的区别

1、IO流的分类:
按照流的方向分为:输入流,输出流。
(1)输出流:以内存为基准,把内存中的数据写出到磁盘文件或者网络介质中去的流称为输出流。
输出流的作用:写数据到文件,或者写数据发送给别人。

​ (2)输入流:以内存为基准,把磁盘文件中的数据或者网络中的数据读入到内存中去的流称为输入流。
​ 输入流的作用:读取数据到内存。

​ 按照流的内容分为: 字节流,字符流。
​ (1)字节流:流中的数据的最小单位是一个一个的字节,这个流就是字节流。
​ (2)字符流:流中的数据的最小单位是一个一个的字符,这个流就是字符流。(针对于文本内容)

2、IO流的体系

字节流字符流
字节输入流字节输出流字符输入流字符输出流
InputStreamOutputStreamReaderWriter
FileInputStreamFileOutStreamFileReaderFileWriter

a.FileInputStream文件字节输入流
– 构造器:
1.public FileInputStream(File path):创建一个字节输入流管道与源文件对象接通。
2.public FileInputStream(String pathName):创建一个字节输入流管道与文件路径对接。
– 方法:
1.public int read():每次读取一个字节返回!读取完毕会返回-1
2.public int read(byte[] buffer):从字节输入流中读取字节到字节数组中去,返回读取的字节数量,没有字节可读返回-1。

InputStream inputStream = new FileInputStream("src/123.txt");
//        int ch = 0;
//        while ((ch = inputStream.read()) != -1) {
//            System.out.print((char) ch);
//        }
        byte[] bytes = new byte[3];
        int len = 0;
        while ((len = inputStream.read(bytes)) != -1) {
        System.out.print(new String(bytes, 0, len));
        }

b.FileOutputStream文件字节输出流
– 构造器:
public FileOutputStream(File file):创建一个字节输出流管道通向目标文件对象。
public FileOutputStream(String file):创建一个字节输出流管道通向目标文件路径。
public FileOutputStream(File file , boolean append):创建一个追加数据的字节输出流管道通向目标文件对象。
public FileOutputStream(String file , boolean append):创建一个追加数据的字节输出流管道通向目标文件路径。
– 方法:
public void write(int a):写一个字节出去 。
public void write(byte[] buffer):写一个字节数组出去。
public void write(byte[] buffer , int pos , int len):写一个字节数组的一部分出去。
参数一,字节数组;参数二:起始字节索引位置,参数三:写多少个字节数出去。

OutputStream outputStream = new FileOutputStream("src/z.txt", true);
        StringBuilder list = new StringBuilder();
	    list.append("xu");
        list.append("song");
        list.append("V");
        list.append("A");
        list.append("E");
        outputStream.write(list.toString().getBytes());

释放资源的方式:try-with-resources:
try(
// 这里只能放置资源对象,用完会自动调用close()关闭
){

​ }catch(Exception e){
​ e.printStackTrace();
​ }
c.FileReader:文件字符输入流
​ – 构造器:
​ public FileReader(File file):创建一个字符输入流与源文件对象接通。
​ public FileReader(String filePath):创建一个字符输入流与源文件路径接通。
​ – 方法:
​ public int read(): 读取一个字符的编号返回! 读取完毕返回-1
​ public int read(char[] buffer):读取一个字符数组,读取多少个字符就返回多少个数量,读取完毕返回-1

Reader reader = new FileReader("src/z.txt");
        char[] bytes = new char[3];
        int len = 0while ((len = reader.read(bytes)) != -1) {
        System.out.print(new String(bytes, 0, len));
        }

d.FileWriter文件字符输出流的使用
– 构造器:
public FileWriter(File file):创建一个字符输出流管道通向目标文件对象。
public FileWriter(String filePath):创建一个字符输出流管道通向目标文件路径。
public FileWriter(File file,boolean append):创建一个追加数据的字符输出流管道通向目标文件对象。
public FileWriter(String filePath,boolean append):创建一个追加数据的字符输出流管道通向目标文件路径。
– 方法:
a.public void write(int c):写一个字符出去
b.public void write(String c)写一个字符串出去:
c.public void write(char[] buffer):写一个字符数组出去
d.public void write(String c ,int pos ,int len):写字符串的一部分出去
e.public void write(char[] buffer ,int pos ,int len):写字符数组的一部分出去

Writer writer = new FileWriter("src/123.txt", true);
        writer.write("qeweqeeqeqdadd\nadsasdad");
        writer.close();

缓冲流

1、 什么是缓冲流:缓冲流可以提高字节流和字符流的读写数据的性能。
缓冲流分为四类:
(1)BufferedInputStream:字节缓冲输入流,可以提高字节输入流读数据的性能。
(2)BufferedOutStream: 字节缓冲输出流,可以提高字节输出流写数据的性能。
(3)BufferedReader: 字符缓冲输入流,可以提高字符输入流读数据的性能。
(4)BufferedWriter: 字符缓冲输出流,可以提高字符输出流写数据的性能。
a.字节缓冲输入流:BufferedInputStream
– 构造器: public BufferedInputStream(InputStream in)
– 原理:缓冲字节输入流管道自带了一个8KB的缓冲池,每次可以直接借用操作系统的功能最多提取8KB的数据到缓冲池中去,以后我们直接从缓冲池读取数据,所以性能较好!

InputStream inputStream = new FileInputStream("src/123.txt");
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        byte[] bytes = new byte[3];
        int len = 0;
        while ((len = bufferedInputStream.read(bytes)) != -1) {
        System.out.print(new String(bytes, 0, len));
        }

b.字节缓冲输出流:BufferedOutputStream
– 构造器:public BufferedOutputStream(OutputStream os)
– 原理:缓冲字节输出流自带了8KB缓冲池,数据就直接写入到缓冲池中去,性能极高了!

OutputStream outputStream = new FileOutputStream("src/123.txt");
    BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
    bufferedOutputStream.write("asdasdadsdadwqe\ndas我说的asda".getBytes());
    bufferedOutputStream.close();

c、字符缓冲输入流:BufferedReader
– 构造器:public BufferedReader(Reader reader):
– 原理:缓冲字符输入流默认会有一个8K的字符缓冲池,可以提高读字符的性能。
– 缓冲字符输入流除了提高了字符输入流的读数据性能,
缓冲字符输入流还多了一个按照行读取数据的功能(重点):
public String readLine(): 读取一行数据返回,读取完毕返回null;

Reader reader = new FileReader("src/123.txt");
 	BufferedReader bufferedReader = new BufferedReader(reader);
 	String line;
	while ((line = bufferedReader.readLine()) != null) {
    System.out.println(line);
  }

d、字符缓冲输出流:BufferedWriter
– 构造器:public BufferedWriter(Writer writer):
– 原理:高级的字符缓冲输出流多了一个8k的字符缓冲池,写数据性能极大提高了!
– 字符缓冲输出流除了提高字符输出流写数据的性能,还多了一个换行的特有功能:
public void newLine():新建一行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值