ByteArrayInputStream vs自己的类

时间:2012-03-14 15:15:20

标签: java

我想知道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()方法之间的区别是什么?函数似乎是相同的,只是一个改变位置,一个读取字节跳过它们。

3 个答案:

答案 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类。

  1. 它将被很好地调试
  2. 它可以节省您的开发时间
  3. 它将实现适当的接口等,以便与其他类进行良好的交互
  4. 其他开发人员会熟悉它
  5. 我真的不会重新发明轮子,除非有引人注目的理由这样做。