【程序编程相关:为什么我的图片显示不出来,是个筐,请高手】
【推荐阅读:Mave项目管理实战演练 】【扩展信息:JNDI全攻略之(一) 】
1.1. 说明:在新的i/o系统当中,我们将主要使用channel与buffer来描述我们底层的操作.1.2. 模型:1.3. 对channel进行读写:/** * @author cenyongh@mails.gscas.ac.cn */public class copyfile { public static void main(string[] args) throws exception { string in = args[0]; string out = args[1]; fileinputstream fis = new fileinputstream(in); fileoutputstream fos = new fileoutputstream(out); filechannel inc = fis.getchannel(); filechannel outc = fos.getchannel(); bytebuffer bb = bytebuffer.allocate(1024); while (true) { int ret = inc.read(bb); if (ret == -1) { break; } bb.flip(); outc.write(bb); bb.clear(); } }}注:我们并没有直接对channel进行读写,而是通过buffer来对channel进行间接操作.这里有两个地方要注意,就是我们在拷贝的过程当中调用了flip()与clear()方法,这两个方法的作用,将在后面讲解.
1.4. 手工填充buffer/** * @author cenyongh@mails.gscas.ac.cn */public class writefile { public static void main(string[] args) throws exception { string out = args[0]; string in = args[0]; fileinputstream fin = new fileinputstream(in); fileoutputstream fout = new fileoutputstream(out); filechannel inc = fin.getchannel(); filechannel outc = fout.getchannel(); bytebuffer bb = bytebuffer.allocate(256); for (int i = 0; i < 256; i++) bb.put((byte) i); bb.flip(); outc.write(bb);
bb.clear(); inc.read(bb); bb.flip(); for (int i = 0; i < bb.limit(); i++) { system.out.println(bb.get()); } }}注:通过调用buffer上的put()与get()方法,我们可以手工的往buffer当中填充数据.
1.5. buffer的状态量.buffer主要使用三个状态量position,limit,capacity来标记底层的状态.其中capacity表征buffer的最大容量,这个值在buffer被分配时设定,一般不会随着操作改变.position表征buffer的当前读写位置,不管是读操作还是写操作,都会导致position的增加.limit表征buffer的最大可读写位置,limit总是小于或等于capacity.1.5.1. 结构图:1.5.2. flip()与clear()操作flip(){... 下一页