[英]What 0 returned by InputStream.read(byte[]) means? How to handle this?
[英]How could InputStream.read(byte) method ever work?
我对InputStream类的一种方法有疑问,因为在我看来,它永远无法正常工作。
让我们有这样的事情:
InputStream is;
byte[] b = new byte[64];
is.read(b);
// and now the byte array b contains data comming through InputStream???
我会理解.read()
方法的用法是否看起来像这样:
b = is.read();
因为read方法将返回字节数组。
但是,真正的方法如何在其参数中写入内容并使它在自身之外可见?
就像我会这样:
String myString = "myText";
public void myMethod(String s) {
s = "abc123";
}
myMethod(myString);
// and now is the content of myString equal to "abc123" instead of "myText" ???
// ANSWER: no!
多谢您的回覆。
除了基本类型以外的所有东西都是java中的对象(包括数组)。 对象通过引用的副本从一种方法传递到另一种方法。 因此,如果调用的方法对传递给它的对象进行了更改,则该方法最终将对传递给它的对象进行更改。 因此,更改也会反映到调用方法中。
您需要了解对象以及如何在方法调用之间传递对象,以详细了解此内容。 请参考此链接以获得更好的理解。
因为read方法将返回字节数组。
嗯 你在哪里读的? InputStream
的.read()
方法返回一个整数 。
真正的方法如何在其参数中写入内容并使它在其外部可见?
因为您传递对.read(byte[])
将写入的数组的引用 。 该方法的返回值是实际写入作为参数传递的字节数组的字节数。
此代码有效:
public void writeOneToFirstElement(final int[] array)
{
array[0] = 1;
}
final int[] foo = { 0 };
writeOneToFirstElement(foo);
System.out.println(foo[0]); // prints 1
数组仅是对对象的引用,并且导致数据所驻留的地址在修改时不会发生变化,因此可以按这种方式工作。此处解释: http : //www.javaworld.com/javaqa/2000-05/03-qa-0526 -pass.html
编辑:错别字
byte array
和String
都是引用类型 ..当您将它们作为参数传递时,引用将被复制,并且它们都引用同一对象。
例如, remote
就像TV
的参考。当您将遥控器传递给另一个人时,他仍然可以访问TV
对象通过引用的副本从一种方法传递到另一种方法。 因此,如果调用的方法对传递给它的对象进行了更改,则该方法最终将对传递给它的对象进行更改。 因此,更改也会反映到调用方法中。 例如替换String
与所述参数String[]
和检查输出。
public static void main(String[] args)
{
String[] myString = {"myText"};
myMethod(myString);
System.out.println(myString[0]);
}
public void myMethod(String[] s) {
s[0] = "abc123";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.