繁体   English   中英

InputStream.read(byte)方法如何工作?

[英]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 arrayString都是引用类型 ..当您将它们作为参数传递时,引用将被复制,并且它们都引用同一对象。


例如, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM