![](/img/trans.png)
[英]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.