我有以下代码要通过文件通道编写
fc.write(bytebuffer, position);在我提到的几个教程中,这是可以的,它可以很好地完成工作。但在javadoc https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html#write-java.nio.ByteBuffer-long-中,此方法不返回写入的字节数。因此,我的问题是,在某些情况下,这是否可能只写入bytebuffer的一部分?我需要把它包装在一个循环中吗?这段代码有没有bug等着发生?
发布于 2020-11-13 10:37:45
方法FileChannel.write(...)实现了方法WritableByteChannel.write(...)。此接口可用于多种通道。WritableByteChannel.write(...)文档告诉我们:
除非另有说明,否则只有在写入所有r个请求的字节后,写入操作才会返回。根据其状态,某些类型的通道可能仅写入某些字节,或者可能根本不写入。例如,非阻塞模式下的套接字通道写入的字节数不能超过套接字输出缓冲区中可用的字节数。
但在使用FileChannel的情况下,它将始终写入并返回ByteBuffer中的剩余元素。
https://stackoverflow.com/questions/64814485
复制相似问题