我想知道java.io包中的ByteArrayInputStream类是否适合使用?或者,如果要通过使用字节数组(例如:
)将其与自己的类进行比较private int pos = 0;
private final byte[] total;
public Reader(final byte[] total) {
this.total = total;
}
public int read() {
return ((int) total[pos++]) & 0xFF;
}
字节不是从文件中获取的,它应该是接收字节/数据包的服务器。该函数与ByteArrayInputStream中的函数相同。我很好奇是否会使用ByteArrayInputStream类,它会增加放入java内存的字节数吗?但基本上,在性能方面,哪个更值得推荐?
谢谢。
编辑*我想我已经得到了答案,我想知道mark()和skip()方法之间的区别是什么?函数似乎是相同的,只是一个改变位置,一个读取字节跳过它们。
答案 0 :(得分:2)
read()
的实施与ByteArrayInputStream
中的实现惊人相似:
public synchronized int read() {
return (pos < count) ? (buf[pos++] & 0xff) : -1;
}
只有额外的开销来自synchronized
,我认为这可以忽略不计。 ByteArrayInputStream
基本上是byte[]
周围的薄包装器。你想要达到什么目标?
答案 1 :(得分:2)
无论如何,如果Java提供具有特定功能的类,请使用该类并更好地利用自己的时间。与代码相比,ByteArrayInputStream将存储两个以上的整数,因此差异可以忽略不计。它的读取方法与您编写的方法基本相同。
Performancewise,您可以通过一次读取多个字节来获得更好的结果。同样,ByteArrayinputStream为您提供此功能。
答案 2 :(得分:2)
我通常会考虑使用现有的java.io
类。
我真的不会重新发明轮子,除非有引人注目的理由这样做。