Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ByteArrayInputStream中包装字节数组_Java_Io_Inputstream - Fatal编程技术网

Java 在ByteArrayInputStream中包装字节数组

Java 在ByteArrayInputStream中包装字节数组,java,io,inputstream,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 w

我只是想了解使用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=newbytearrayinputstream(字节)

像这样

ByteArrayInputStream输入=新的ByteArrayInputStream(字节)

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

我真的很感谢你的帮助

可以写这部分吗

像这样

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

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

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

是的,你可以写

InputStream input = new ByteArrayInputStream(bytes);

它在功能上是相同的

然而,在OOP中,人们普遍建议“编程到接口”。请参阅以获取解释


在这种情况下,严格来说,
InputStream
不是一个接口,而是一个抽象的超类。不过,它或多或少像一个界面。

谢谢你的回答,我不是在这里做实验。我正在寻求帮助来理解这个概念。我认为这就是网站的目的,对吗?@TabTab对于有经验的开发人员来说,经常令人困惑的是,为什么人们会问一些自己更容易解决的问题。
InputStream input
不是一个对象,它是对必须实现此接口的对象的引用。注意:您不能创建InputStream的实例。
    ( ByteArrayInputStream input = new ByteArrayInputStream(bytes);)
InputStream input = new ByteArrayInputStream(bytes);
ByteArrayInputStream input = new ByteArrayInputStream(bytes);