gpt4 book ai didi

java - 将数据从 ReadableByteChannel 传输到文件

转载 作者:行者123 更新时间:2023-12-02 11:15:29 26 4
gpt4 key购买 nike

目标:从一个源解密数据并将解密的数据写入文件。

try (FileInputStream fis = new FileInputStream(targetPath.toFile());
ReadableByteChannel channel = newDecryptedByteChannel(path, associatedData))
{
FileChannel fc = fis.getChannel();
long position = 0;
while (position < ???)
{
position += fc.transferFrom(channel, position, CHUNK_SIZE);
}
}

newDecryptedByteChannel(Path,byte[]) 的实现不应该令人感兴趣,它只是返回一个 ReadableByteChannel。

问题:结束while循环的条件是什么?何时到达“字节 channel 末尾”? transferFrom 是正确的选择吗?

This question可能相关(答案是将计数设置为Long.MAX_VALUE)。不幸的是,这对我没有帮助,因为文档说最多可以传输 count 个字节,具体取决于 channel 的性质和状态。

另一个想法是只检查实际传输的字节数是否为 0(从 transferFrom 返回),但如果源 channel 是非阻塞的且少于 count,则此条件可能为真字节在其输入缓冲区中立即可用。

最佳答案

这是FileChannel. transferFrom()的奇怪特征之一它永远不会告诉您流结束。您必须独立知道输入长度。

我会为此使用流:具体来说, CipherInputStream大约 BufferedInputStream大约 FileInputStream ,以及 FileOutputStream .

但是您发布的代码无论如何都没有任何意义。这是行不通的。您正在通过源自 FileInputStream 的 channel 传输到输入文件中。 ,所以它是只读的,所以transferFrom()会抛出异常。

关于java - 将数据从 ReadableByteChannel 传输到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50312048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com