20 (IO字节流,文件拷贝)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Haidaiya/article/details/82935990

1 IO流

2 FileInputStream

重要方法read(),每次读取一个字节,返回值为int。

当没有字节的时候,会返回-1,所以文件的结束标记是-1,那么会出现一个新的问题,read()为什么返回int值呢?

而不是返回byte呢?是这样的,如果是byte,万一文件中存储了-1,程序会错误的以为文件已经结束了,所以它返回的时候前面补上24个0。

3 FileOutputStream

FileOutputStream在创建对象的时候会清空文件内的内容,再写进去。

追加:可以在构造时设置追加为true

4 拷贝图片

问题:当拷贝大文件时,效率很低

开发推荐:标准格式

5 BufferedInputStream和BufferedOutputStream

他们是对InputStream和OutputStream的包装,使得他们更加强大,运用缓冲区大小8192,提高效率,每次读取8192到缓冲区。缓冲区积累8192,使得效率很高。

flush和close,一个是刷新之后还可以用流,一个是刷新之后关闭流。

6 字节流读取中文的问题

一个中文等于两个字节。所以会出现读取半个字节的问题。

写中文可以写,但是需要将字符串.getBytes()转换为字符数组来写。

7 异常处理模板

jdk1.6版本

package com.haidai.IO;

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

public class Demo1 {

	public static void main(String[] args) throws IOException {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream("xxx.txt");
			fos = new FileOutputStream("yyy.txt");

			int len;
			while ((len = fis.read()) != -1) {
				fos.write(len);
			}
		} finally {
			if (fis != null || fos != null) {
				fis.close();
				fos.close();
			}
		}
	}

}

jdk1.7版本(自动关闭流)

package com.haidai.IO;

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

public class Demo2 {

	public static void main(String[] args) throws IOException {
		try (
			FileInputStream fis = new FileInputStream("xxx.txt");
			FileOutputStream fos = new FileOutputStream("yyy.txt");
			) {
			int len;
			while ((len = fis.read()) != -1) {
				fos.write(len);
			}
		}
	}

}

8 图片加密

异或的特点。

猜你喜欢

转载自blog.csdn.net/Haidaiya/article/details/82935990
今日推荐