gpt4 book ai didi

java - InputStream/OutputStream read()/write()函数相关性及用法

转载 作者:行者123 更新时间:2023-11-30 04:13:38 26 4
gpt4 key购买 nike

对于java.io.InputStream,有两个主要的读取函数int read()public int read(byte[] b, int off, int len) .

同样,对于 java.io.OutputStream 有两个函数 write(b) 和 write((byte[] b, int off, int len))

虽然我理解基本区别,但在阅读 write(b) 的描述时,它说“要写入的字节是参数 b 的 8 个低位。24 个高位b 被忽略。”现在,如果是这种情况,那么我们实际上浪费了 CPU 为整数加载的 32 位指令集中的剩余 24 位。相反,如果我使用其他写入 ((byte[] b, int off, int len)),那么我将占用堆/堆栈作为字节数组的大小。当我试图思考哪一个更适合高可扩展性时,我不能忽视 write(b) 浪费 24 位(3 字节),而另一方面,如果我使用 read/write(byte[] b, int off, int len),我会冒更大的堆栈大小的风险。那么,最好的选择是什么?

在解决方法中,我尝试通过提供 byte[4] 来使用所有 32 位来扩展 InputStream 和 OutputStream 并覆盖 read(b) 和 write(b) 函数。它工作得很好,但仍然需要看看这是否有任何性能增强。它与使用 read/write(4, 0, int 4) 非常相似

我将不胜感激有关此主题的任何帮助/评论。

最佳答案

如果您想提高速度,您可能需要一次读/写几个字节。例如,如果您想在磁盘上写入/读取某些内容,您可能需要一次读取/写入整个扇区(4k 或 8k 字节)。

此外,这样做可以最大限度地减少系统调用的数量,从而使应用程序速度更快。

关于堆栈,在java中,字节数组将位于堆上,并且只有引用存储在堆栈上,如@Mike提到的。

关于java - InputStream/OutputStream read()/write()函数相关性及用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18968372/

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