java io 缓存_Java开发知识之JavaIO操作缓存操作

带缓存的输入/输出流

一丶简介

缓存是I/O的一种性能优化.缓存流为 I/O 流增加了内存缓存区.有了缓存区,那么在流上执行 skip().mark() reset()方法,都成为可能.

总来的来说其实就是通过缓存读写.执行效率更高,更快.

二丶BufferedInputStream 与 BufferedOutputString类.

BufferedInputString(InputStream in)可以对所有InputString类进行带缓存的包装,达到性能优化.

1.两种构造方法

9a5dd541ed9c9327afcfb01c5796b70f.png

第一种: 传入一个InPutStream类的实现类对他做包装,带有32个字节的缓存.

第二种: 指定一个大小.

比如读取文件,BufferdInputStream对象位于InputStream类对象之前.

a2b369309d0def52e921aa62f30c88d1.png

2.BufferOutputStream类.

1.构造方法

使用BufferdOutputStream输出信合和用OutputStream输出信息一样.只不过BufferedOutputStream有一个flush方法,用来将缓存区的数据强制输出玩.

1c2d35b03253dc6b5e8d80ed9e9835c3.png

只不过翻过来了,第一种就是构造32个字节缓存.第二个指定大小.创建.

-针对BufferedInputStream做包装实例

private static void File() throws Exception {

// TODO 自动生成的方法存根

File f = new File("1.txt");//创建一个文件

InputStream in = new FileInputStream(f);

BufferedInputStream inn = new BufferedInputStream(in);//对in做包装

byte[] a = new byte[10];

inn.read(a);//利用缓冲区读取

System.out.println(Arrays.toString(a));//输出字节数组内容.

System.out.println(new String(a)); //字节数组,转为字符串显示.

}

输出结果.

5a8ec8a4a11e2d6ce846210ff51ca459.png

BufferedOutputStream类实例

private static void File() throws Exception {

// TODO 自动生成的方法存根

File f = new File("1.txt");//创建一个文件

InputStream in = new FileInputStream(f);

OutputStream out = new FileOutputStream(f);

BufferedOutputStream outBuf = new BufferedOutputStream(out);

outBuf.write(new String("HelloWroldssss sdfsdfsdf").getBytes());

outBuf.flush();

outBuf.close();

}

文件中的结果

50f2bc1595b5b5c9cf9345c8cae5aace.png

三丶BufferedReader类与BufferedWriter类

我们曾经说过,Java是Unicode字节集.所以字节读取可能出现错误.

然后针对这种错误,出现了Reader类以及Writer类.而缓冲流也针对这两个类实现了.就是上面所说的类.也就是内部缓存类.

用法跟上面的BufferedInputStream类一样.

1.BufferedReader缓存类的使用介绍.

-1.文件读取流程

d42dc3c363851bed73e21846334b2a7d.png

提供的方法

40d98365ea69247bc02463a4722b1b9c.png

代码例子

private static void File() throws Exception {

// TODO 自动生成的方法存根

File f = new File("1.txt");//创建一个文件

Writer wfile = new FileWriter(f); //创建写文件UNICODE形式.

BufferedWriter wBufferFile = new BufferedWriter(wfile);//对写文件创建缓冲区.

String str[] = {"今天","你","学习了吗"};

//写入文件

for(int i = 0; i < str.length;i++) {

wBufferFile.write(str[i]);//循环写入

wBufferFile.flush();

}

wBufferFile.close();

}

实现结果

227ef4ce769bfbd5dd6d7ab5b5af77ca.png

四丶数据输入/输出流

数据输入输出流(DataInputStream与DataOutputStream)允许应用程序与机器无关的方式,从底层输入流中读取基本的java数据类型,也就是说,当读取一个数据的时候,不用关心这个数值应该是那种字节了.

1.构造以及常用方法

1f240ac3c850dca0cad528208ba28190.png

java是Unicode编码.上字节.writebytes知识将字符中的每一个字符的低字节内容写到目标设备

writeChars将字符串中的两个字节内容写到目标设备

writeUtf则是按照UTF方式写入到目标设备.

输入流,提供了ReadUTF()用于读取,并且返回字符串.

例子:

private static void File() throws Exception {

// TODO 自动生成的方法存根

File f = new File("1.txt");//创建一个文件

OutputStream wfile =new FileOutputStream(f); //创建写文件UNICODE形式.

DataOutputStream out = new DataOutputStream(wfile);

String str[] = {"今天","你","学习了吗"};

//写入文件

out.writeChars("今");

out.close();

}

总结

其实都是对输入输出流做的缓存封装,在流上封装了新的方法.读取数据.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值