JavaNIO2:需要澄清FileChannel吗

JavaNIO2:需要澄清FileChannel吗,java,filechannel,nio2,Java,Filechannel,Nio2,我正在尝试构建一个定制,但由于文档中的不一致性,我遇到了一个缺乏清晰性的问题 该方法的文档说明 如果给定位置大于文件的当前大小,则不传输字节 现在,他们不应该说这句话吗 “如果position+count大于文件的当前大小,则不会传输字节。” 我怀疑这可能是文档中的一个bug的原因是。在同一API文档的其他地方,如果文件需要增长,则会明确提及该文件,例如: “如果给定位置大于文件的当前大小,则文件将增长以容纳新字节;” 所以,如果没有提到任何文件增长的情况下,我得到的印象是,文件不应该通过这种方

我正在尝试构建一个定制,但由于文档中的不一致性,我遇到了一个缺乏清晰性的问题

该方法的文档说明

如果给定位置大于文件的当前大小,则不传输字节

现在,他们不应该说这句话吗

“如果
position+count
大于文件的当前大小,则不会传输字节。”

我怀疑这可能是文档中的一个bug的原因是。在同一API文档的其他地方,如果文件需要增长,则会明确提及该文件,例如:

“如果给定位置大于文件的当前大小,则文件将增长以容纳新字节;”

所以,如果没有提到任何文件增长的情况下,我得到的印象是,文件不应该通过这种方法增长。但是问题是,文件不仅可以增长“如果给定位置大于文件的当前大小”,而且“如果
位置+计数
大于文件的当前大小”

和你一样:

如果源通道剩余的字节数少于count,或者如果源通道为非阻塞且其输入缓冲区中立即可用的字节数少于count,则传输的字节数将少于请求的字节数

为什么要从ReadableBitechanne开始发展

所以:

编辑1: “如果位置+计数大于文件的当前大小,则不传输字节。”

意味着:

Path sourcePath = Paths.get("C:/FileChannelDemo/source.txt");
Path targetPath = Paths.get("C:/FileChannelDemo/target.txt");

Files.createDirectories(sourcePath.getParent());

BufferedWriter writer = Files.newBufferedWriter(sourcePath,
        StandardCharsets.UTF_8);

// 200k
while (Files.size(sourcePath) < 200 * 1024)
    writer.write(System.currentTimeMillis() + "\n");

FileChannel src = FileChannel.open(sourcePath, StandardOpenOption.READ);

FileChannel trgt = FileChannel.open(targetPath, EnumSet.of(StandardOpenOption.WRITE, 
        StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING));

int count = 200*1024;

System.out.println("current size is: " + Files.size(targetPath) + "smaller than  count:" +count);

trgt.transferFrom(src, 0, count);
Path sourcePath=Path.get(“C:/FileChannelDemo/source.txt”);
Path targetPath=Path.get(“C:/FileChannelDemo/target.txt”);
Files.createDirectories(sourcePath.getParent());
BufferedWriter writer=Files.newBufferedWriter(sourcePath,
标准字符集(UTF_8);
//20万
while(Files.size(sourcePath)<200*1024)
writer.write(System.currentTimeMillis()+“\n”);
FileChannel src=FileChannel.open(sourcePath,StandardOpenOption.READ);
FileChannel trgt=FileChannel.open(targetPath,EnumSet.of(StandardOpenOption.WRITE,
StandardOpenOption.CREATE,StandardOpenOption.TRUNCATE_EXISTING));
整数计数=200*1024;
System.out.println(“当前大小为:“+Files.size(targetPath)+”小于计数:“+count”);
trgt.transferFrom(src,0,count);
不会传输任何数据。但确实如此


不传输
count
字节的原因如上所述。

我的问题是关于调用
transferFrom
的目标
FileChannel
。。。源中的字节将转到何处。我不想在源频道上寻求澄清。@Harry希望这会有所帮助