Java Nio

(1)NIO

a)  Nio之所以比旧的io速度快是因为,nio使用的结构更接近于系统操作执行io的操作:通道和缓冲器.

(2)如何操作nio读写数据

Nio读写方式可以想象成:数据源和数据目的地是煤矿与煤场,通道想象成告诉公路,缓冲器是卡车,nio中的FileChannel是装卸煤用的工具,ByteBuffer是装煤用的卡车.在新的io中我们不对通道进行直接操作.在使用卡车前首先我们需要一个卡车(ByteBuffer)我们可以使用ByteBuffer的静态方法allocate或者allocateDirect方法构造出ByteBuffer实例(有点像C语言中的malloc函数).使用FileChannel的write/read方法进行装卸,write方法可以想象成卸载煤矿,在卸载前需要调用ByteBuffer的flip方法,read方法可以想象成装载,装载前调用clear方法.一下是个简单的势力:

1public static void main(String[] args) throws Exception { 2 File srcf=new File("D:\\aa.mp4"); 3 File tarf=new File("D:\\ww.mp4"); 4 FileInputStream fis=new FileInputStream(srcf); 5 FileOutputStream fos=new FileOutputStream(tarf); 6 FileChannel fic=fis.getChannel(); 7 FileChannel foc=fos.getChannel(); 8 ByteBuffer buf=ByteBuffer.allocate(1024); 9 while (fic.read(buf)!=-1) { 10 buf.flip(); 11 foc.write(buf); 12 buf.clear(); 13 } 14 fic.close(); 15 foc.close(); 16 }

(3)视图缓冲

       a)  视图缓冲可以让我们更直观的向"卡车(ByteBuffer)"中写入读取基本类型,对视图的修改都会映射成对ByteBuffer中数据的修改.比如写入char型数据可以使用ByteBuffer的           asCharBuffer获得视图CharBuffer然后使用put/get方法写入获取char类型数据.视图的类型:IntBuffer,Shor-
     tBuffer,LongBuffer,DoubleBuffer,CharBuffer,FloatBuffer

(4)操作ByteBuffer:

       a)  操作ByteBuffer方法有:

          1.  position返回/设置当前位置

          2.  limit 返回/设置界限

          3.  mark 记录mark值为当前position值

          4.  reset 重置position为mark值

          5.  remaining返回当前位置与限制之间的元素数

         6.  hasRemaining返回当前位置与

         7.  flip()将当前position设置为limit,将position设置为0

将ByteBuffer中的position想象成在一个栈中的指针,那么在从ByteBuffer取出字节像管道写入的时候就要将指(position)设置在0上然后不断的取出字节指导指针到达数据结尾(limit处)所以写入的时候就要使用flip()方法。从管道取出字节写入到ByteBuffer要将内部的指针设置0 然后清空其内的数据就要使用read方法。

(5)使用Charset:

使用CharSet可以对字节序列进行编码,对字节序列进行编码,静态方法forName("编码类型(GBK之类)")获得CharSet对象

a)  encode(String):对参数进行编码,把得到的字节序列放在一个ByteBuffer对象中,并返回

b)  Encode(CharBuffer)对参数进行编码,把得到的字节序列放在一个buteBuffer中并返回

c)  CharBufferdncode(ByteBuffer):将参数字节序列编码放在CharBuffer中,并返回.

编码与反编码前后使用flip反转缓存limit为position position为0

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

NIO入门

1、I/O输入输出,所有的IO都被视作是单个字节的移动,通过stream对象一次移动一个字节。流IO负责把对象转换为字节,然后再转换为对象。NIO提供了二套NIO,一套是针对标准输入输出NIO,另一套是网络编程NIO2、流与块的比较NIO和IO最大的区别是数据打包和传输方式,IO是以流的方式来处理数据,而NIO是以块的方式处理数据。面向块的IO

Netty(二)

一、先讲下NIO编程。NIO(NonblockI/O),亦叫做非阻塞I/O与Socket类和ServerSocket类相对应,NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现。1 缓冲区Buffer这里首先介绍缓冲区的概念,NIO和原I/O的一个重要区别就是NIO库中,所有数据都是用缓

JAVA NIO(一)

1NIO概述1.1NIO(newIO)是一个可以替代javaIOAPI的API,NIO提供了与标准IO不同的工作方式,标准IO是基于字节流和字符流进行操作的,而NIO是基于channel和Buffer进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写到通道中,方式如例图示,JAVANIO的几个核心组成部分是channels,Buf

Java NIO学习笔记

JavaNIO是什么JavaNIO(NewIO)是从Java1.4版本开始引入的一个新的IOAPI,可以替代标准的JavaIOAPI。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。JavaNIO与IO