Skip to content

Commit 6354945

Browse files
author
liuxun
committed
Javanio
1 parent e8bb559 commit 6354945

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.algorithm.study.demo.nio;
2+
3+
import java.io.FileNotFoundException;
4+
import java.io.IOException;
5+
import java.io.RandomAccessFile;
6+
import java.nio.ByteBuffer;
7+
import java.nio.CharBuffer;
8+
import java.nio.channels.FileChannel;
9+
import java.nio.charset.Charset;
10+
import java.nio.charset.CharsetDecoder;
11+
12+
/**
13+
* @author liuxun
14+
* @version V1.0
15+
* @Description: JavaNio Channel
16+
* @date 2017/12/4
17+
*/
18+
public class ChannelTest {
19+
public static void main(String[] args) throws IOException {
20+
try {
21+
Charset charset = Charset.forName("GBK");
22+
//Java.nio.charset.Charset处理了字符转换问题。它通过构造CharsetEncoder和CharsetDecoder将字符序列转换成字节和逆转换。
23+
CharsetDecoder decoder = charset.newDecoder();
24+
25+
RandomAccessFile raf = new RandomAccessFile("E:\\data.txt", "rw");
26+
FileChannel fc = raf.getChannel();
27+
//create buffer with capatity of 512 bytes
28+
ByteBuffer buffer = ByteBuffer.allocate(512);
29+
CharBuffer cb = CharBuffer.allocate(512);
30+
//写入数据到Buff
31+
int count = fc.read(buffer);
32+
while (count != -1) {
33+
System.out.println("count = "+count);
34+
//通过flip()方法将Buffer从写模式切换到读模式
35+
buffer.flip();
36+
decoder.decode(buffer, cb, false);
37+
cb.flip();
38+
//从Buffer中读取数据
39+
while (cb.hasRemaining()) {
40+
System.out.print(cb.get());
41+
}
42+
System.out.println();
43+
//清空缓冲区
44+
buffer.clear();
45+
cb.clear();
46+
count = fc.read(buffer);
47+
}
48+
raf.close();
49+
} catch (Exception e) {
50+
e.printStackTrace();
51+
}
52+
}
53+
}

0 commit comments

Comments
 (0)