旧的I/O类库中有三个类被修改了,用以产生FileChannel。来看看他们的例子:
package com.wjy.nio; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class GetChannel { private static final int BSIZE=1024; public static void main(String args[]){ try { FileChannel fcChannel=new FileOutputStream(new File("./file/out.txt")).getChannel(); fcChannel.write(ByteBuffer.wrap("Some text ".getBytes())); fcChannel.close(); fcChannel=new RandomAccessFile(new File("./file/out.txt"), "rw").getChannel(); fcChannel.position(fcChannel.size()); //移动到文件末尾,以添加内容 fcChannel.write(ByteBuffer.wrap("randomaccessfile".getBytes())); fcChannel.close(); fcChannel=new FileInputStream(new File("./file/out.txt")).getChannel(); ByteBuffer buff=ByteBuffer.allocate(BSIZE); fcChannel.read(buff); buff.flip(); //这句很重要,没有这句出不来结果。一旦调用read()来向ByteBuffer存储字节,就必须调用缓冲器上的flip(),让它做好让别人读取字节的准备。 while(buff.hasRemaining()){ System.out.print((char)buff.get()); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
/*OutPut Some text randomaccessfile *///
号外:一旦调用read()来向ByteBuffer存储字节,就必须调用缓冲器上的flip(),让它做好让别人读取字节的准备。
请注意:如果打算使用缓冲器执行进一步的read()操作,我们也应该必须调用clead()为下次read()做好准备。所以,正常的过程应该是:
while(in.read(buffer)!=-1)
{
buffer.flip(); //准备好写
out.write(buffer);
buffer.clear(); //准备好读
}
相关推荐
经过对Flume FileChannel相关源码的分析,导致FileChannel吞吐率下降的主要原因集中于事务的提交过程——commit
7.1 打开一个FileChannel 7.2 从FileChannel通道中读取数据 7.3 向FileChannel中写入数据: 7.4 关闭FileCha
//测量第一个字符串,与第三个参数即宽度相比 paraLines.add(strParagraph.substring(0, nSize)); //获得0到nSize的字符串 strParagraph = strParagraph.substring(nSize); //字符串变成从nSize...
【IT十八掌徐培成】Java基础第26天-06.FileChannel-RandomAccessFile-CopyFile.zip
通道表示到实体,如硬件设备、文件、网络套接字或可以执行一个或多个不同 I/O 操作(如读取或写入)的程序组件的开放的连接。 在以往的java的IO操作的过程中都是面向字节流操作,并且读写操作是单向的操作,而在java...
java各类IO流的整理demo,其内包含InputStream/OutputStream BufferedReader流 FileOutputStream/FileInputStream流 PrintWriter流 DataOut/DataIn流 Object流 FileChannel类;
合并文本代码,读取文件,合并为一个txt public static final int BUFSIZE = 1024 * 8; public static void mergeFiles(String outFile, ArrayList<String> files) { FileChannel outChannel = null; try { ...
要读取的多个I / O实现。 SAMBox使用允许使用基于java.nio.channels.FileChannel , java.io.InputStream和java.nio.MappedByteBuffer的提供的实现之一(是否缓冲)。 通过使用java.lang.StringBuilder池最小化GC。...
编写一个java应用程序,将一个包含多个子目录和文件的目录复制到另外一个指定的目录下。 实验要求 1)欲复制的目录中包含的文件数和子目录层次未知,必须在程序执行时获得这些信息。 2)显示欲复制的目录的...
jruby-stdin-channel JRuby Java 扩展 gem,它从 Java System.in stdin 中提取可中断的FileChannel。 使用这个 gem,在阻塞read方法上调用close将解除阻塞,这与普通的 JRuby $stdin 。 使用close转义阻塞读取仅适用...
01-Java NIO-课程简介.mp4 02-Java NIO-概述.mp4 03-Java NIO-Channel-概述.mp4 04-Java NIO-Channel-FileChannel(介绍和示例).mp4 ...14-Java NIO-Buffer-三个属性和类型.mp4 15-Java NIO-Buffer-分配和读写数据.mp4
* 如果是地区记录,0x1和0x2的含义不明,但是如果出现这两个字节,也肯定是跟着3个字节偏移,如果不是 则为0结尾字符串 三. * "起始地址/结束地址偏移"记录区 1. 每条记录7字节,按照起始地址从小到大排列 a. ...
两个通道之间传输数据的方式有两种,分别是:FileChannel 的transferFrom()方法可以将数据从源通道传输到FileChannel中(这个方法在
Jackcess是一个Java 类库,用来读写微软的Access 数据库。 Jackcess 1.2.9 这个小功能版本增加了一些功能,以方便实施参照完整性和更方便的数据库构造。另一种FileChannel的实现,现在是完全基于内存在更广泛的情况...
H264TrackImpl h264TrackImpl = new H264TrackImpl(new ... FileChannel fChannel = new FileOutputStream(new File("C://a.mp4")).getChannel(); mp4f.writeContainer(fChannel); fChannel.close();
14-Java NIO-Buffer-三个属性和类型.mp4 17-Java NIO-Buffer-缓冲区分片.mp4 18-Java NIO-Buffer-只读缓冲区.mp4 19-Java NIO-Buffer-直接缓冲区.mp4 21-Java NIO-Selector-概述.mp4 23-Java NIO-Selector-示例代码...
1.1 阻塞 IO 2.3 FileChannel 介绍和示例 2.4 FileChannel 操作详解
本套视频教程内容丰富,讲解透彻,由浅入深,循序渐进,每个技术点既有理论讲解,又有配套实践案例,真正的理论与实践相结合。教程内容涵盖:阻塞和非阻塞IO、Channel通道、Buffer缓冲区、Selector选择器、Pipe管道...
javaSE 关于IO几种读取方式的性能比较 1.二进制数据 2.字符数据 3.压缩文件
非易失性映射的字节缓冲将添加新的 JDK 特定文件映射模式,该模式允许 FileChannel API 用于创建引用非易失性内存(NVM)的 MappedByteBuffer 实例。 358:Helpful NullPointerExceptions 改进 ...