对于java.io.InputStream中,有两个主要的功能读INT 读()和公共INT读(字节[] B,诠释断, int len)。的InputStream/OutputStream的读()/ write()函数的相关性和用法
类似地,对于java.io.OutputStream中有两个功能写入(b)和写((字节[] B,诠释断,INT LEN))
虽然我理解的基本差异,但在阅读写(b)的描述时,它表示它说:“要写入的字节是参数b的八个低位,而b的24个高位被忽略。”现在如果是这样的话,那么我们实际上是在浪费32位指令集中的剩余24位,CPU将加载一个整数。相反,如果我使用其他写入((byte [] b,int off,int len)),那么我将占用堆栈/堆栈以获取字节数组的大小。虽然我试图想到哪一个更适合高可伸缩性,但我不能忽视写(b)浪费24位(3字节),而另一方面,如果我使用读/写(byte [] b,int关闭,int len),我有更高的堆栈大小的风险。那么,什么是最好的选择?
在解决方法中,我试图扩展InputStream和OutputStream,并通过提供一个字节[4]来使用所有32位来覆盖读取(b)和写入(b)函数。它工作得很好,但仍然必须看看这是否有任何性能增强。它非常类似于使用读/写(4,0,int 4)
我将不胜感激任何关于此主题的帮助/评论。
谢谢。声明4K/8K字节是一个很好的提示。但是,你不觉得,在硬盘上声明一个相当于扇区的块会很大吗?你不认为对于具有局部变量的函数,整个数组将被复制到堆栈?在字节数组是一个类变量的情况下,我明白它自然是一个引用,因为byte []声明在堆上。 – Ashley
@Ashley,我想你对Java中的数组如何工作存在误解。看到[这个问题](http://stackoverflow.com/questions/2099695/java-array-is-stored-in-stack-or-heap)。数组总是存储在堆上。 – mpontillo
@Ashley在磁盘上的4k/8k相比其他应用程序的内存中的jvm存储相当小。 – Claudiu