import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import org.junit.Test; public class FileChannelInTest { @Test public void testFileRead1() throws Exception{ Charset charset = Charset.forName("utf-8"); RandomAccessFile aFile = new RandomAccessFile("D:/dump01.txt", "rw"); FileChannel inChannel = aFile.getChannel(); // 从FileChannel中读取数据 ByteBuffer byteBuffer = ByteBuffer.allocate(48); long start = System.currentTimeMillis(); String read = ""; while (true) { int eof = inChannel.read(byteBuffer); if (eof == -1) break; byteBuffer.flip(); read = charset.decode(byteBuffer)+""; System.out.print(read); byteBuffer.clear(); } System.out.println("spending : " + (System.currentTimeMillis()-start)); inChannel.close(); aFile.close(); } @Test public void testFileRead2() throws Exception{ RandomAccessFile aFile = new RandomAccessFile("D:/dump01.txt", "rw"); FileChannel inChannel = aFile.getChannel(); ByteBuffer buf = ByteBuffer.allocate(48); int bytesRead = inChannel.read(buf); while (bytesRead != -1) { System.out.println("Read " + bytesRead); buf.flip(); while (buf.hasRemaining()) { System.out.print((char) buf.get()); } buf.clear(); bytesRead = inChannel.read(buf); } aFile.close(); } }
import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import org.junit.Test; public class FileChannelOutTest { @Test public void testFileWrite1() throws Exception{ String newData = "New String to write to file..." + System.currentTimeMillis(); RandomAccessFile aFile = new RandomAccessFile("D:/channelOutTest.txt", "rw"); FileChannel outChannel = aFile.getChannel(); ByteBuffer buf = ByteBuffer.allocate(48); buf.clear(); buf.put(newData.getBytes()); buf.flip(); while(buf.hasRemaining()) { outChannel.write(buf); } aFile.close(); } }