Io流的相关问题

一、 IO 流的三种分类方式

  1. 按流的方向分为:输入流和输出流
  2. 按流的数据单位不同分为:字节流和字符流
  3. 按流的功能不同分为:节点流和处理流
    二、 IO 流中的抽象基类、文件流、缓冲流
    抽象基类:InputStream OutputStream Reader writer
    文件流:FileInputStream FileOutputStream FileReader FileWriter
    缓冲流:BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter
    三、 字符流和字节流的区别,使用场景,相关类

Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。
Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。

那开发中究竟用字节流好还是用字符流好呢?

一、字符(Reader和 Writer):中文,字符是只有在内存中才会形成的,操作字符、字符数组或字符串,

二、字节(InputStream 和OutputStream):音频文件、图片、歌曲,所有的硬盘上保存文件或进行传输的时候,操作字节和字节数组或二进制对象,

*如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。

File inFile = new File("c:\\a.txt");
File outFile = new File("c:\\b.txt");
		
FileInputStream inputStream = new FileInputStream(inFile);
FileOutputStream outputStream = new FileOutputStream(outFile);
//边读边写
byte[] content = new byte[1024];
int len;
while ((len = inputStream.read(content)) != -1) {
	outputStream.write(content, 0, len);
}
outputStream.flush();
outputStream.close();
inputStream.close();
//一次性读写
File outFile2 = new File("c:\\c.txt");
FileInputStream inputStream2 = new FileInputStream(inFile);
FileOutputStream outputStream2 = new FileOutputStream(outFile2);
byte b[]=new byte[(int)inFile.length()];
inputStream2.read(b);
outputStream2.write(b);
outputStream2.flush();
outputStream2.close();
inputStream2.close();

三、缓冲区

缓冲区可以简单地理解为一段内存区域。
可以简单地把缓冲区理解为一段特殊的内存。
某些情况下,如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存速度会比较快,这样可以提升程序的性能。
在字符流的操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。
如果想在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类中的flush()方法完成。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值