簡體   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