黑马程序员--IO之字节流

8 篇文章 0 订阅
2 篇文章 0 订阅
------- android培训java培训、期待与您交流! ----------

IO

1.什么是IO

IO就是输入(Input)输出(Output), 我们会学习java.io包中的一些类, 这些类用来完成Java程序中的输入输出操作

2.输入输出流

在Java程序读取写出数据时, 需要使用输入流和输出流

输入流(InputStream)用来读取数据, InputStream的各个子类可以从各种数据源中读取数据

输出流(OutputStream)用来写出数据, OutputStream的各个子类可以向各种数据目的地写出数据

3.FileInputStream读取文件

创建FileInputStream对象, 关联一个文件

调用read()方法可以读取一个字节, 如果读到末尾返回-1

调用close()方法关闭流, 释放资源

4.FileOutputStream写出文件

创建FileOutputStream对象, 关键一个文件. 文件如果不存在就创建, 文件存在则清空. 如果需要追加, 构造函数中多传一个true.

调用write()方法可以写出一个字节.

调用close()方法关闭流, 释放资源.

5.拷贝文件

例子:

 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyByArrayDemo {

	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("路径\\文件名"); 
		FileOutputStream fos = new FileOutputStream("目的文件名");
		
		byte[] buffer = new byte[1024];			// 定义数组用来当作缓冲区, 越大越快, 但是更占内存
		int len;								// 定义变量, 用来记住每次拷贝的个数
		while ((len = fis.read(buffer)) != -1)	// 从流中读取数据到buffer中, len记住读取了多少个
			fos.write(buffer, 0, len);			// 将buffer中的数据写出, 写出len个
		
		fis.close();
		fos.close();
	}

}


 

*** a.逐个字节:   使用FileInputStream.read()和FileOutputStream.write(int)

循环读取, 读取到一个字节, 判断是否是文件末尾, 不是末尾就写出. 

由于操作文件速度较慢, 逐个字节读取效率很低. 

*** b.自定义数组: 使用FileInputStream.read(byte[])和FileOutputStream.write(byte[], int, int)

自定义一个数组当作缓冲区, 一次拷贝一个数组(多个数据), 一次写出一个数组(多个数据)

这样做减少了操作文件的次数, 提高了效率.

*** c.自带缓冲区: 使用BufferedInputStream.read()和BufferedOutputStream.write(int)

Java提供了带有缓冲功能的类.

如果用BufferedInputStream来读取一个字节, 其内部会先读取一批用来缓冲, 返回给程序一个, 下次再读取时不再从文件中读取.

如果用BufferedOutputStream来写出一个字节, 其实这个字节不会直接写出到文件, 是写出到缓冲区中, 直到缓冲区写满或者关闭流时才会写到文件.

这样的机制也是为了尽量少的操作文件, 提高效率.

  * 6.标准化代码

使用IO流的时候是必须关闭流的, 而使用IO流的代码通常都是会抛出异常的, 如果程序运行过程中某行代码出现异常, 下面代码不会再执行.

为了避免关闭流的代码被异常中断掉, 通常关闭流的代码都是写在finally代码块中的.

而如果有多个流需要关闭, 每个关闭流的代码都要单独放在try和fianlly中, 因为关流的代码通常也会抛出异常.

------- android培训java培训、期待与您交流! ----------   详细请查看: http://edu.csdn.net/heima/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值