gpt4 book ai didi

java - 使用 ReadableByteChannel 和 TransferFrom() 编写输入流

转载 作者:行者123 更新时间:2023-12-01 16:23:33 25 4
gpt4 key购买 nike

代码被分割成 Grails Web 应用程序的多个函数,但其​​想法是这样的

MultipartFile mf = request.getPart();    
InputStream is = mf.getInputSteam();
Long size = mf.getSize();

ReadableByteChannel source = Channels.newChannel(inputStream);
FileChannel target = new FileOutputStream(new File('/path/to/file.jpg')).getChannel();
target.transferFrom(source, 0, size);

大小正确,InputStream 有效并且 ReadableByteChannel/FileOutputStream 已正确创建,但没有任何内容写入输出文件。

我宁愿用经典的“传输”方法对其进行编码,但我尝试了缓冲区方法,效果并不好

ByteBuffer buff = ByteBuffer.allocate(bufferSize)
FileChannel target = new FileOutputStream(targetFile).getChannel()
ReadableByteChannel source = Channels.newChannel(inputStream)

while (source.read(buff) >= 0 || buff.position() > 0) {
buff.flip()
target.write(buff)
buff.compact()
}

我错过了什么?

最佳答案

检查transferFrom()的结果,它返回大小transferrde,使用try()来确保这些流在您期望的时候关闭 - 特别是对于“new FileOutputStream”/“FileChannel target”

关于java - 使用 ReadableByteChannel 和 TransferFrom() 编写输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62206765/

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