I/O流

Reader和Writer

基于InputStream和OutputStream的新类。基于适配器模式,相应的InputStream类可以转换为InputStreamReader,OutputStream同样可以转换为OutputStreamWriter

目的

设计它的目的在于为了国际化。老的I/O流继承层次结构仅仅支持8位字节流,不能很好地处理16位字节流。由于Unicode用于支付国际化(java的char类型也是16位),所以添加它是为了更好的支持Unciode,此外,它比旧的I/O速度更快

java.util.zip类库是面向字节的,最明智的做法使用Reader和Writer

N I/O

JDK1.4以来,就引入的新的I/O模块,旧的IO也均默认用Nio来优化,提升速度了。

新的I/O有了更快的速度,速度的提高来源于更加接近操作系统中心I/O的方式:通道和缓冲器。通道相当于一个储藏区,缓冲器相当于数据包,我们把数据put到缓冲器中,然后在派送到通道里,相当于我直接与缓冲器打交道。而通道要么充缓冲器获取数据,要么充缓冲器发送数据

ByteBuffer

存储未加工字节的缓冲器。
warp()方法,将已经存在的字节数组包装到ByteBuffer中
allocate()用来分配ByteBuffer,nio的目的是快递移动大量数据。因此ByteBuffer的大小很重要。在使用中一定的结合实际运用程序来决定ByeBuffer的容量大小。
flip()方法,一旦调用read()来写入字节,就必须调用该方法。让它做好别人读取字节的准备。read后,操作完毕,最好进行clear,方便我们下次进行操作。

视图缓冲器(View Buffer)

通过某个特定基本数据类型的视图来查看ByteBuffer,视图的修改,也相当于ByteBuffer的修改。

ByteBuffer buffer = ByteBuffer.allocate(1024);
            IntBuffer intBuffer = buffer.asIntBuffer();//操作int类型的基本数据
            intBuffer.put(123);
            intBuffer.put(126);
            intBuffer.put(124);
            intBuffer.flip();
            while (intBuffer.hasRemaining()){
                int i = intBuffer.get();
                System.out.println(i);

            }

用缓冲器操作文件的正确方式应该是,我们打开一个文件的chanel,然后通过chenal写入ByteBuffer。

 FileChannel fileChannel = new FileOutputStream(new File("a.txt")).getChannel();
            fileChannel.write(ByteBuffer.wrap("hello".getBytes()));

position : 指向第一个元素,capacaty和limit则指向最后一个元素,当get()和put(),position就会随之改变,向后移动,一直到limit后,到达末尾。
rewind(): 使position重置到最开始的位置0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值