提问人:Krlin Homon 提问时间:10/16/2023 最后编辑:Mark RotteveelKrlin Homon 更新时间:10/16/2023 访问量:35
如何实现 ObjectInputStream::read 函数的返回值
How to realize the ObjectInputStream::read function's return value
问:
使用Java套接字传输文件时,我设置了,用来接收文件流,但是返回值总是1024,为什么不是。byte[] BUFFER = new byte[1024 * 8]
objectInputStream.read(BUFFER, 0, BUFFER.length)
objectInputStream.read(BUFFER, 0, BUFFER.length)
1024
1024 * 8
BUFFER 长度为 1024 * 8
但 Len 是 1024 岁。
答:
3赞
Mark Rotteveel
10/16/2023
#1
最多返回 1024 的原因是内部使用了 1024 字节的缓冲区(尽管这是一个实现细节,因此在不同的 Java 版本或发行版中可能会有所不同)。A 不需要返回请求的字节数,因此 A 将返回其当前缓冲区中可用的字节数,或者从其上游输入流请求 1024 个字节并返回该字节数。read
ObjectInputStream
read
ObjectInputStream
但是,正如我在评论中提到的,从您在问题中显示的代码片段来看,您可能根本不应该使用 an。您正在传输使用 获取的二进制数据,这意味着您没有在所示代码中使用 Java 序列化。也许您应该改用正常的输入和输出流(也就是说,也许您确实在较早的时候使用了序列化,尽管在单个流中结合序列化和正常二进制传输通常很奇怪)。ObjectInputStream
read
评论
0赞
Krlin Homon
10/16/2023
谢谢你,原因是我需要在转换字节数组之前转换文件的其他信息。该文件的其他信息是一个名为 java bean,其中包含 fileName、fileLength 和有关该文件的其他信息。所以我使用 ObjectInputStream::readObject 来接收 bean。为了解决这个问题,如果可以,我可以考虑使用 ObjectInputStream 读取 bean 和 DataInputStream 读取字节数组。FileTransModel
0赞
Mark Rotteveel
10/16/2023
@KrlinHomon 如果您不打算使用 .为此,请使用正常的输入流。也就是说,您可以继续使用 ,但您必须接受这样一个事实,即您只能读取 1024 字节的块。在这种情况下,请减小缓冲区的大小,并在每次写入后删除对的调用,以便您真正从缓冲输出流的缓冲区中受益!DataInputStream
DataInputStream
ObjectInputStream
flush()
0赞
Krlin Homon
10/16/2023
学到了,非常感谢
评论
ObjectInputStream
ObjectInputStream
flush