Java_IO流

#IO流
Input 输入,用于读取
Output 输出,用于写入
Stream (数据)流
InputStream 输入流(只读),文件-》内存, 相对内存而言的
OutputStream 输出流(只写),内存-》文件, 相对内存而言的
InputStream/OutputStream 抽象类(字节流的超类),以字节为单位进行操作的流


##1.1 字节流


1.FileInputStream/FileOutputStream
是"低级流",创建不需要依赖其他流。是对文件进行读写操作的流。常用方法和RandomAccessFile基本一样。
FileInputStream fis = null;
try {
	fis = new FileInputStream(YourFileName);
	byte[] b = new byte[10];
	int a = fis.read(b);
	System.out.println(Arrays.toString(b));
} catch (FileNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}finally {
	fis.close();
}

FileOutputStream fos = null;
FileOutputStream fos1 = null;
try {
	fos = new FileOutputStream(yourFileName);
	fos1 = new FileOutputStream(yourFileName);
	byte[] b = {97,98,99,100};
	byte[] c = {101,102,103,104};
	fos.write(b);
	fos1.write(c);
} catch (FileNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} finally {
	fos.close();
	fos1.close();
}

FileOutputStream 若使用一个参数的构造则为覆盖操作。
若使用双参构造,第二个参数(boolean)表示是否以追加方式写入


2. DataInputStream/DataOutputStream
是高级流。创建需要依赖低级流
提供更多类型的读写操作比如:readInt/double/char.....
writeInt/double/char
DataInputStream dis = new DataInputStream(new FileInputStream(yourFileName));
byte[] b = new byte[1024];
int len = dis.read(b );
//int readInt = dis.readInt();
System.out.println(new String(b,0,len,"UTF-8"));

3.BufferdInputStream/BufferdOutputStream
高级流,提供了缓存功能字节流
Buffer的InputStream在通过read方法读取一个字节,并不是只读取一个字节,而是一次性读取若干个字节,存入到BIS(简写)内部维护的缓存区缓冲区(字节数组),将数组的第一个字节返回。这样的好处在于:当再执行read读取一个字节的时候,不是读取文件,而是直接读取缓冲区再返回下一个字节,提高读取效率。


BufferOutputStream在通过write方法写一个字节,并不是立刻写出,而是现将数据写入缓冲区,只有当这个缓冲区满了,才真正的写出一次。
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(youFileName),50);
bos.write("呦呦切克闹,煎饼果子来一套".getBytes());
//bos.flush();
bos.close();
bos.flush()方法,会强制清空缓冲区(强制写入文件)
bos.close()方法,会自动调用flush()来完成清空的操作


该类线程安全的


(1).看API文档研究使用方法
(2).看看源码
(3).练习使用,操作文件(复制,创建一个空文件,写入一段内容)。


4.ByteArrayInputStream、ByteArrayOutputStream
是低级流,目标是内存字节数组,操作的是内存(缓冲区)
(com.yulin.IO.Demo07)
(com.yulin.IO.Demo08)


5.ObjectInputStream/ObjectOutputStream
是高级流,将java对象转换为字节数组
(com.yulin.IO.Demo09)


序列化:将现有对象转换成一组字节的过程
反序列化:将一组字节转换成对象的过程
持久化:将数据写入到文件中的过程
(com.yulin.IO.Demo10)


InputStream/OutputStream 字节流的父类,抽象类
FileInputStream/FileOutputStream 目标是操作文件
ByteArrayInputStream/ByteArrayOutputStream 目标是内存数组
DateInputStream/DateOutputStream 高级流,提供更多类型的操作
BufferedInputStream/BufferedOutputStream 高级流,带缓存的、线程安全的
ObjectInputStream/ObjectOutputStream 高级流,操作对象的(什么是序列化、反序列化、持久化。如何序列化、反序列化需要注意什么问题)


##1.2 字符流


字符流,以字符为单位进行读写操作。
字符流都是高级流,底层依然是以字节为单位的操作。
字符流用于一般的文本型文件的操作。
字符流的父类是Writer/Reader,属于抽象类。

InputStreamReader/OutputStreamWriter
将字节转换成字符流,
(com.yulin.IO.Demo11)
(com.yulin.IO.Demo12)
(com.yulin.IO.Demo13)

BufferedWriter/BufferedReader
带缓存的Writer/Reader
readLine();读一行字符串,遇到换行符或者回车换行读,读到文件末尾返回null
(com.yulin.IO.Demo14)

PrintWriter
是BufferedWriter的升级版,带自动刷新和换行写
(com.yulin.IO.Demo15)

RandomAccessFile 随机访问一个文件,读写的功能,当对文件某个部分进行操作的时候使用RAF;
I/O流不能对文件进行随机访问,当对文件进行整体操作的时候使用I/O流。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值