我只是想了解使用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);
为什么这段代码的作者用超类和子类创建了对象?
我非常感谢你的帮助。
答案 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
类型的变量。这是完全正常的。