使用Java套接字传输文件时,我设置了
byte[] BUFFER = new byte[1024 * 8]
,并使用objectInputStream.read(BUFFER, 0, BUFFER.length)
来接收文件流,但是objectInputStream.read(BUFFER, 0, BUFFER.length)
的返回值始终是1024,为什么会是1024
而不是1024 * 8
。
BUFFER长度为1024 * 8
但是 len 是 1024。
read
最多返回1024的原因是因为ObjectInputStream
内部使用了1024字节的缓冲区。 read
不需要返回请求的字节数,因此 ObjectInputStream
将返回当前缓冲区中可用的内容,或者从其上游输入流请求 1024 字节并返回。
但是,正如我在评论中也提到的那样,从您在问题中显示的代码片段来看,您可能根本不应该使用
ObjectInputStream
。您正在传输使用 read
获得的二进制数据,这意味着您没有在所示代码中使用 Java 序列化。也许您应该改用普通的输入和输出流(也就是说,也许您确实在早期使用了序列化,尽管将序列化和普通的二进制传输结合在单个流中通常很奇怪)。