小女子求解nio写文件问题
本帖最后由 senlinmuvs 于 2013-09-29 15:05:51 编辑
private static void testWrite1() throws Exception {
FileOutputStream fos = new FileOutputStream("D:/x.txt");
//
FileChannel fc = fos.getChannel();
//
ByteBuffer bf = ByteBuffer.allocate(1024);
bf.putInt(1);
bf.putInt(2);
System.out.println(bf);
//
// ByteBuffer bf = ByteBuffer.wrap(";Hello,java NIO".getBytes());
bf.flip();
System.out.println(bf);
fc.write(bf);
fc.close();
fos.close();
}
问题1:
写到文件里的为毛是这样:
问题2:
为什么用
ByteBuffer bf = ByteBuffer.wrap(";Hello,java NIO".getBytes());
这种形式创建ByteBuffer时但就得把bf.flip();这句注掉才能写入,不然是个空文件?
有何玄机在里面,求解!
------解决方案--------------------楼主了解一下
字符编码 的相关知识吧。
文件只保存二进制数据,至于这个数据是什么格式存放的,要由楼主来决定。
ByteBuffer是面向比特、字节的,一个整型数据,由4个字节表示。
两个整型数据,就是8个字节。
读取的时候,也要按照这种编码规则读取,如果按照字符编码规则读取,那么,显示的就不会是整数。
问题二,要求楼主再仔细看看ByteBuffer的API文档,了解缓冲区的内部操作,这样自然就明白是怎么回事了。
------解决方案--------------------写文件干嘛不用传统io呢,个人觉得nio应该比较适合于高并发性的网络传输,对于写文件只会增加复杂度。
------解决方案--------------------木用过。。。
------解决方案--------------------+1 要永远牢记:开发时用最适合实现你的功能的,而不是为了什么而用什么。
------解决方案--------------------所以选择使用某项技术,首先要读的是这项技术能够做什么,而不是直接去使用具体的API接口
------解决方案--------------------字符流使用Writer,使用字节流得不到期望的结果。
------解决方案--------------------nio在jdk5之后就没有再更新过了,jdk6,7重写了io底层,部分采用nio技术,除非在高并发领域,否则没必要纠结nio,妹子,哥建议一下