IO流-输入输出的简单实例

InputStream和OutputStream

抽象类InputStream和OutputStream是IO流最底层的两个抽象类,所有输入/输出流的类都基于这两个类.

这两个类里最核心的三个方法是read()和write(),以及close()

read() : InputStream类里的方法, 负责读取内容到输入流

write() : OutputStream类里的方法, 负责将内容输出.

close() : 两个类里都有这个方法, 负责关闭流,先关闭输入流,再关闭输出流

 

read()有3个重载方法,分别是:

public abstract int read() throws IOException : 每次读取1字节,以int形式返回这一字节的数据内容,全部读取完成时返回-1表示读取完毕

public int read(byte b[]) throws IOException : 读取数据到传入的byte数组中,返回读取的字节数,全部读取完毕时返回-1,该方法相当于read(b[], 0, b.length)

public int read(byte b[], int off, int len) throws IOException : off:表示从数组中的第几位开始存储数据 len:表示数组中使用的字节数. b[].length= off+len+剩余的字节数 ,返回值等同于read(byte b[])

***一个byte类型变量是1个字节,所以new byte[1024]是1KB(1024字节),1个英文字母或数字对应1字节容量***

FileInputStream和FileOutputStream的实例

	@Test
	public void test() {
		//新建一个byte数组用来存储读到的数据,大小是1KB(1024字节)
		byte[] oneByte = new byte[1024];
		try {
			//创建输入和输出流
			FileInputStream inStream = new FileInputStream("C:/test/aaa.txt");
			FileOutputStream outStream = new FileOutputStream("C:/test/bbb.txt");
			//循环读取(read)aaa.txt文件的内容到oneByte,并输出到bbb.txt
			//当文件读取完成时(返回-1),结束循环
			while (inStream.read(oneByte) != -1) {
				//把刚读到的内容输出到bbb.txt
				outStream.write(oneByte);
			}
			//最后一定记得关闭输入输出流,先输入,在输出
			inStream.close();
			outStream.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

注意:

1.如果文件体积小于byte数组(),输出时仍将完整的输出byte数组中的数据,包括未赋值的null,看下图

文件体积6字节,byte数组容量调整为8字节.

     

2.如果文件体积大于byte数组,但最后一次读取的数据体积小于byte数组,这将造成一些问题,因为byte数组在赋值前并未被清空,所以byte数组中仍会保留一部分上次循环中存储的数据.看下图

文件体积6字节,把byte数组容量调成5字节,可以看到,byte数组中未被覆盖的数据(上次循环时的数据)在第二次循环中被输出(红框部分)

     

使用public int read(byte b[], int off, int len) throws IOException

 还是上边的代码,read(byte b[])改成用read(byte b[], int off, int len)方法,其他不变,罗列情况如下

1.文件体积6字节,byte数组容量8字节,read(b[], 0, 8)

    

2.文件体积6字节,byte数组容量8字节,read(b[], 1, 6)

    

3.文件体积6字节,byte数组容量8字节,read(b[], 1, 8)

数组下标越界,因为1+8>b[].length

 

转载于:https://www.cnblogs.com/jinyu59/p/10747991.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值