Java InputStream.read(字节)方法如何工作?
我对InputStream类的一个方法有疑问,因为在我看来它根本不可能工作 让我们有这样的东西: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 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[])方法。这会让你的问题完全不同。欢迎来到堆栈溢出。请在回答中总结链接;这样,如果链接过时,答案也不会完全无用。