如何实现ObjectInputStream::read函数的返回值

问题描述 投票:0回答:1

使用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。

java io objectinputstream
1个回答
0
投票

read
最多返回1024的原因是因为
ObjectInputStream
内部使用了1024字节的缓冲区。
read
不需要返回请求的字节数,因此
ObjectInputStream
将返回当前缓冲区中可用的内容,或者从其上游输入流请求 1024 字节并返回。

但是,正如我在评论中也提到的那样,从您在问题中显示的代码片段来看,您可能根本不应该使用

ObjectInputStream
。您正在传输使用
read
获得的二进制数据,这意味着您没有在所示代码中使用 Java 序列化。也许您应该改用普通的输入和输出流(也就是说,也许您确实在早期使用了序列化,尽管将序列化和普通的二进制传输结合在单个流中通常很奇怪)。

© www.soinside.com 2019 - 2024. All rights reserved.