JAVA IO

一 接口分类

基于字节操作的 I/O 接口:InputStream 和 OutputStream

基于字符操作的 I/O 接口:Writer 和 Reader

基于磁盘操作的 I/O 接口:File

基于网络操作的 I/O 接口:Socket

PS为什么需要字符操作,I/O所有的操作都是基于字节(因为计算机最小存储单位是字节),提供基于字符的操作只是因为我们代码中常用的是字符,仅仅为调用方便。

 

二 字符和字节的转化

1 java I/O所有的操作都是基于字节,在读取和写入的时候就需要字节和字符之间的转化

2 读字符的时候用到的是StreamDecode,最后用的是CharsetDecoder的decode方法

最后的实际就是,字符+编码去查码表得到二进制数(例如:字符串"3".getBytes()得到是51,查看utf-8的编码表后字符3就是对应的51)

 

三 JAVA I/O的初始化使用了包装器模式

 

四 注意的地方

1 用完就关闭,以免资源泄露

关闭流的时候,只有文件流和socket中有本地方法close0(),所以我认为只用关闭最内层的流即可;不论先关闭内层和外层的流,再去读写的时候都会报stream closed的错

2 用缓冲流一次读写多个字节更快

(1)缓冲流定义了一个byte[] buffer数组,如果没有指定大小,初始化是2^13 = 8192;

(2)每次写操作的时候判断buffer数组:

length > buffer.lenfth 全部写完

如果能填充完buffer就写,多余的继续保存在buffer中

 

Most of the examples we've seen so far use unbuffered I/O. This means each read or write request is handled directly by the underlying OS

To reduce this kind of overhead, the Java platform implements buffered I/O streams. Buffered input streams read data from a memory area known as a buffer; the native input API is called only when the buffer is empty. Similarly, buffered output streams write data to a buffer, and the native output API is called only when the buffer is full.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值