使用ByteBuffer和MappedByteBuffer的简单例子

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.ReadableByteChannel;

public class Test {
 // static int length = 0x8FFFFFF; // 128 Mb
 static int length = 0xFFFFFFF; //

 public static void main(String[] args) throws Exception {
  Test t = new Test();
  t.testByteBufferRead();
  t.testMappedByteBufferRead();
 }

 public void testByteBufferRead() {
  try {
   int length = 0XFFFFFFF;
   MappedByteBuffer out = null;
   try {
    out = new RandomAccessFile("c:/test.dat", "rw").getChannel()
      .map(FileChannel.MapMode.READ_WRITE, 0, length);

    for (int i = 0; i < length; i++)
     out.put((byte) 'x');
    System.out.println("Finished writing");
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
   // Obtain a channel
   ReadableByteChannel channel = new FileInputStream("c:/test.dat")
     .getChannel();

   // Create a direct ByteBuffer; see also e158 Creating a ByteBuffer
   ByteBuffer buf = ByteBuffer.allocateDirect(10);

   int numRead = 0;
   while (numRead >= 0) {
    // read() places read bytes at the buffer's position so the
    // position should always be properly set before calling read()
    // This method sets the position to 0
    buf.rewind();

    // Read bytes from the channel
    numRead = channel.read(buf);

    // The read() method also moves the position so in order to
    // read the new bytes, the buffer's position must be set back to
    // 0
    buf.rewind();

    // Read bytes from ByteBuffer; see also
    // e159 Getting Bytes from a ByteBuffer
    for (int i = 0; i < 10; i++) {
     byte b = buf.get(i);
     System.out.println((char) b);
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }

 }

 public void testMappedByteBufferRead() {
  int length = 0XFFFFFFF;
  MappedByteBuffer out = null;
  try {
   out = new RandomAccessFile("c:/test.dat", "rw").getChannel().map(
     FileChannel.MapMode.READ_WRITE, 0, length);

   for (int i = 0; i < length; i++)
    out.put((byte) 'x');
   System.out.println("Finished writing");
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  for (int i = length / 2; i < length / 2 + 6; i++)
   System.out.print((char) out.get(i)); // read file
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值