你的位置:首页 > 软件开发 > Java > Java NIO服务器端开发

Java NIO服务器端开发

发布时间:2016-07-10 15:00:04
一、NIO类库简介  1、缓冲区Buffer  Buffer是一个对象,包含一些要写入和读出的数据。  在NIO中,所有的数据都是用缓冲区处理的,读取数据时,它是从通道(Channel)直接读到缓冲区中,在写入数据时,也是从缓冲区写入到通道。  缓冲区实质上是一个数组,通常是一个 ...

Java NIO服务器端开发

一、NIO类库简介

  1、缓冲区Buffer

  Buffer是一个对象,包含一些要写入和读出的数据。

  在NIO中,所有的数据都是用缓冲区处理的,读取数据时,它是从通道(Channel)直接读到缓冲区中,在写入数据时,也是从缓冲区写入到通道。

  缓冲区实质上是一个数组,通常是一个字节数组(ByteBuffer),也可以是其它类型的数组,此外缓冲区还提供了对数据的结构化访问以及维护读写位置等信息。

  Buffer类的继承关系如下图所示:

  Java NIO服务器端开发

  2、通道Channel

  Channel是一个通道,网络数据通过Channel读取和写入。通道和流的不同之处在于通道是双向的(通道可以用于读、写后者二者同时进行),流只是在一个方向上移动。

  Channel大体上可以分为两类:用于网络读写的SelectableChannel(ServerSocketChannel和SocketChannel就是其子类)、用于文件操作的FileChannel。

  下面的例子给出通过FileChannel来向文件中写入数据、从文件中读取数据,将文件数据拷贝到另一个文件中:

public class NioTest{  public static void main(String[] args) throws IOException  {    copyFile();  }  //拷贝文件  private static void copyFile()  {    FileInputStream in=null;    FileOutputStream out=null;    try    {      in=new FileInputStream("src/main/java/data/in-data.txt");      out=new FileOutputStream("src/main/java/data/out-data.txt");      FileChannel inChannel=in.getChannel();      FileChannel outChannel=out.getChannel();      ByteBuffer buffer=ByteBuffer.allocate(1024);      int bytesRead = inChannel.read(buffer);      while (bytesRead!=-1)      {        buffer.flip();        outChannel.write(buffer);        buffer.clear();        bytesRead = inChannel.read(buffer);      }    }    catch (FileNotFoundException e)    {      // TODO Auto-generated catch block      e.printStackTrace();    } catch (IOException e)    {      // TODO Auto-generated catch block      e.printStackTrace();    }    }  //写文件  private static void writeFileNio()  {    try    {      RandomAccessFile fout = new RandomAccessFile("src/main/java/data/nio-data.txt", "rw");      FileChannel fc=fout.getChannel();      ByteBuffer buffer=ByteBuffer.allocate(1024);      buffer.put("hi123".getBytes());      buffer.flip();      try      {        fc.write(buffer);      } catch (IOException e)      {        // TODO Auto-generated catch block        e.printStackTrace();      }    }     catch (FileNotFoundException e)    {      // TODO Auto-generated catch block      e.printStackTrace();    }  }  //读文件  private static void readFileNio()  {    FileInputStream fileInputStream;    try    {      fileInputStream = new FileInputStream("src/main/java/data/nio-data.txt");      FileChannel fileChannel=fileInputStream.getChannel();//从 FileInputStream 获取通道      ByteBuffer byteBuffer=ByteBuffer.allocate(1024);//创建缓冲区      int bytesRead=fileChannel.read(byteBuffer);//将数据读到缓冲区      while(bytesRead!=-1)      {        /*limit=position         * position=0;         */        byteBuffer.flip();        //hasRemaining():告知在当前位置和限制之间是否有元素        while (byteBuffer.hasRemaining())        {          System.out.print((char) byteBuffer.get());        }        /*         * 清空缓冲区         * position=0;         * limit=capacity;         */        byteBuffer.clear();        bytesRead = fileChannel.read(byteBuffer);      }    } catch (FileNotFoundException e)    {      // TODO Auto-generated catch block      e.printStackTrace();    } catch (IOException e)    {      // TODO Auto-generated catch block      e.printStackTrace();    }  }}

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Java NIO服务器端开发

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。