在ByteArrayInputStream中包装字节数组

时间:2014-12-28 09:53:26

标签: java io inputstream

我只是想了解使用ByteArrayInputStream类包装字节数组。这是我对此有疑问的代码。

byte[] bytes = new byte[1024];

//write data into byte array...

InputStream input = new ByteArrayInputStream(bytes);

//read first byte
int data = input.read();
while(data != -1) {
    //do something with data

    //read next byte
    data = input.read();
}

我的问题是可以写这个部分

InputStream input = new ByteArrayInputStream(bytes);

像这样

ByteArrayInputStream input = new ByteArrayInputStream(bytes);

为什么这段代码的作者用超类和子类创建了对象?

我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

是的,你可以写

InputStream input = new ByteArrayInputStream(bytes);

ByteArrayInputStream input = new ByteArrayInputStream(bytes);

功能相同。

然而,在OOP中,它被广泛推荐用于接口"程序。有关说明,请参阅What does it mean to "program to an interface"?

在这种情况下,严格来说,InputStream不是接口,而是抽象超类。但是,它或多或少就像接口一样。

答案 1 :(得分:0)

  

是否可以编写此部分

(InputStream input = new ByteArrayInputStream(bytes);)
  像这样

    ( ByteArrayInputStream input = new ByteArrayInputStream(bytes);)

当然可以。你为什么这么想?你试过的时候发生了什么?为什么使用StackOverflow代替结论性实验?

  

为什么这段代码的作者用超类和子类创建了对象?

他没有。他将对象创建为ByteArrayInputStream的实例。然后他将结果分配给InputStream类型的变量。这是完全正常的。