Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 InputStream.read(字节)方法如何工作?_Java - Fatal编程技术网

Java InputStream.read(字节)方法如何工作?

Java InputStream.read(字节)方法如何工作?,java,Java,我对InputStream类的一个方法有疑问,因为在我看来它根本不可能工作 让我们有这样的东西: InputStream is; byte[] b = new byte[64]; is.read(b); // and now the byte array b contains data comming through InputStream??? b = is.read(); 如果.read()方法的用法如下所示,我会理解: InputStream is; byte[] b = new b

我对InputStream类的一个方法有疑问,因为在我看来它根本不可能工作

让我们有这样的东西:

InputStream is;
byte[] b = new byte[64];

is.read(b);
// and now the byte array b contains data comming through InputStream???
b = is.read();
如果
.read()
方法的用法如下所示,我会理解:

InputStream is;
byte[] b = new byte[64];

is.read(b);
// and now the byte array b contains data comming through InputStream???
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中的对象(包括数组)对象通过引用副本从一个方法传递到另一个方法。因此,如果被调用的方法对传递给它的对象进行更改,则该方法最终会对传递给它的同一对象进行更改。因此,更改也会反映到调用方法中


您需要了解对象以及它们如何在方法调用之间传递,才能详细理解这一点。请参阅以便更好地理解。

该数组只是对对象的引用,并导致数据所在的地址不会因修改而更改,它可以这样工作 解释如下:

编辑:输入错误

字节数组
以及
字符串
都是..当您将它们作为参数传递时,会复制引用,并且它们都引用相同的对象



例如,
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";
}
因为read方法将返回字节数组

嗯??你在哪里读到的

真正的方法如何在其参数中写入内容并使其在自身之外可见

。这个方法的返回值是实际写入作为参数传递的字节数组的字节数

此代码适用于:

public void writeOneToFirstElement(final int[] array)
{
    array[0] = 1;
}

final int[] foo = { 0 };
writeOneToFirstElement(foo);
System.out.println(foo[0]); // prints 1

对象引用是按值传递的。您不能更改它引用的对象,但可以更改其内容。i、 它只是一个肤浅的副本。没有“InputStream.read(byte)方法”这样的东西。有一个read(byte[])方法。这会让你的问题完全不同。欢迎来到堆栈溢出。请在回答中总结链接;这样,如果链接过时,答案也不会完全无用。