transferto的流这么关闭_输入输出流

本文详细介绍了Java中的输入输出流,包括InputStream、OutputStream、Reader、Writer及其相关方法,强调了transferto的使用以及流的关闭。还探讨了字节流与字符流、缓冲流、过滤器、文本I/O、数据I/O、对象序列化、文件操作等。文章指出,正确关闭流以释放系统资源的重要性,并提供了多种流的关闭和管理方式。
摘要由CSDN通过智能技术生成

1.Input/Output Streams

java中input stream是我们用来读取数据字节的对象;output stream是我们用来输出数据字节的对象。输入输出流关注的是数据的读写过程,而具体数据存储可以在文件中,网络中,也可以在内存中。

抽象类InputStream和OutputStream是基本类。

字节流byte stream处理Unicode数据不方便,所以有专门的Reader和Writer来处理字符,基于char,而非byte。

读写字节:

InputStream中有read方法,返回读取的字节对应的int值,到末尾返回-1:

abstract int read()

不同的子类根据需要重写该方法,比如FileInputStream从文件中读取,http://System.in从控制台或重定向文件中读取。

InputStream中还有其他的读方法,比如readAllBytes,都是在read基础上的扩展。

OutputStream中有write方法,每次将一个字节写入:

abstract void write (int b)

也可以传入一个字节数组,一次写入。

in.transferTo(out)将输入数据传递到输出。

read和write在没有完成工作时会阻塞,使用available检查可读数据数目,可以避免线程阻塞。

完成读写任务后,需要调用close来关闭资源,否则会浪费系统的I/O资源。调用close会自动flush输出的缓冲区,因为字节先被放在缓冲区,收集打包后再传递。所以关闭时会自动flush,也可以手动flush。

I/O流家族:

java根据流的使用方式,将流分为不同的类别。比如Date前缀允许以二进制读写基本类型流;Zip前缀,根据压缩格式读写数据;对于Unicode文本,使用Reader和Writer,不同之处在于读写方法处理char(UTF-16)。

还有四个额外的接口,Closeable,Flushable,Readable,Appendable。

Closeable包含void close() throws IOException方法,Flushable包含void flush()方法。java.io.Closeable接口继承自java.lang.AutoCloseable接口,可以使用try-with语句来控制资源。

Readable接口包含int read(CharBuffer cb)方法,CharBuffer支持连续或随机访问。

Appendable接口包含append(char c)和append(CharSequence s)用于处理字符串,String,CharBuffer,StringBuffer,StringBuilder实现了该接口。

使用过滤器:

FileInputStream和FileOutputStream将输入输出绑定到文件,通过传入文件路径到构造器,获取流对象。io包使用相对路径,通过System.getProperty("user.dir")获取工作目录。注意\在字符串中表示转义,需要\\来表示。

文件I/O也只提供字节处理。而Date前缀I/O可以直接处理类型。可以通过构造器将两者结合,将一个文件I/O通过构造器传入数据I/O进行处理,实现了获取与处理的分离。

数据I/O要先实现FilterInputStream和FilterOutputStream,过滤器提供了处理(process)加工字节流的方法。

使用Buffered缓冲I/O先将文件加载到内存,可以提高操作效率。

Pushback前缀允许读后一位read或者unread将其返回。

通过链式构造器,获取想要的I/O。

文本I/O:

保存数据有两种方式,一种是二进制字节流,另一种是字符串。当使用字符串时,需要注意编码格式(character encoding),java语言常用的是以char为基础的UTF-16编码,而网络上流行的编码是UTF-8。

OutputStreamWriter将Unicode编码的输出流转变为字节流,根据选择的编码方式,InputStreamReader将字节流转化为字符流,在构造方法中传入编码方式。

写入文本输出&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值