分散读取和聚集写入
- 分散读取:就是将通道中的数据分散读取到多个缓冲区中
- 聚集写入:就是将多个缓冲区中的数据聚集写入到通道中
分散读取具体实现:
private static void test2() {
RandomAccessFile ras = null;
try {
ras = new RandomAccessFile("doc", "rw");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileChannel fic = ras.getChannel();
ByteBuffer buf1 = ByteBuffer.allocate(1);
ByteBuffer buf2 = ByteBuffer.allocate(1);
ByteBuffer[] bufs = { buf1, buf2 };
try {
fic.read(bufs);
} catch (IOException e) {
e.printStackTrace();
}
for (ByteBuffer buf : bufs) {
/**
* 改变写模式为读模式 在Buffer中进行的操作为: limit = position position = 0;
*/
buf.flip();
}
System.out.println(new String(bufs[0].array(), 0, bufs[0].limit()));
System.out.println(new String(bufs[1].array(), 0, bufs[1].limit()));
}
输出结果为: a b
聚集写入具体实现:
try {
ras = new RandomAccessFile("doc2", "rw");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
FileChannel fon = ras.getChannel();
try {
fon.write(bufs);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
聚集写入完成。
字符集
编码:字符串转变为字节数组
解码:字节数组转变为字符串
观察Java CharSet支持的字符集:
Map<String, Charset> map = Charset.availableCharsets();
Set<Entry<String, Charset>> set = map.entrySet();
for (Entry<String, Charset> entry : set) {
System.out.println(entry.getKey() + "..." + entry.getValue());
}
输出结果为:
Big5...Big5
Big5-HKSCS...Big5-HKSCS
CESU-8...CESU-8
GB18030...GB18030
GB2312...GB2312CN
ISO-2022-JP...ISO-2022-JP
ISO-2022-JP-2...ISO-2022-JP-2
ISO-2022-KR...ISO-2022-KR
ISO-8859-1...ISO-8859-1
ISO-8859-9...ISO-8859-9
......
加密与解密:
Charset charSet = Charset.forName("GBK");
// 获取编码器
CharsetEncoder enchar = charSet.newEncoder();
// 获取解码器
CharsetDecoder dechar = charSet.newDecoder();
CharBuffer cbuf = CharBuffer.allocate(1024);
cbuf.put("张强");
cbuf.flip();
// 编码
ByteBuffer bbuf = ByteBuffer.allocate(2014);
try {
bbuf = enchar.encode(cbuf);
} catch (CharacterCodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int i =0;i<bbuf.limit();i++)
System.out.println(bbuf.get());
bbuf.clear();
try {
CharBuffer cbf = dechar.decode(bbuf);
System.out.println(cbf.toString());
} catch (CharacterCodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}