Initialisieren und liefert ein byte-array in java
In meinem code, den ich zu Durchlaufen haben, eine bye-array (byte[] temp = null;) ein
Funktion zugeordnet ist, und mit Daten gefüllt drin. Nach
Rückkehr aus der Funktion, ist es immer noch null. Wie finde ich eine
Lösung für dieses problem.??? Bitte helfen Sie mir.
byte[] temp = null;
ret = foo(temp);
boolean foo(byte[] temp)
{
temp = new byte[];
//fill array
}
Zeigen Sie uns den code, den Sie haben. Wenn Sie nicht wieder der Typ, der erstellt wurde, dann ist es natürlich null. Das Objekt zerstört wird, sobald Sie zurück zur Hauptseite.
Können Sie den code der Funktion ?
Wenn das ist Ihr code, dann können Sie sehen, warum die null, buchen Sie Ihren code in deiner Frage als edit.
ich weiß, es wird null sein, brauche ich die Daten in temp-array in der main-Methode. Gibt es eine Möglichkeit, dies zu tun?
Java nur übergeben Referenz durch Wert, so dass Sie nicht ändern können, ein argument der Art und Weise, die Sie vorschlagen.
Können Sie den code der Funktion ?
Wenn das ist Ihr code, dann können Sie sehen, warum die null, buchen Sie Ihren code in deiner Frage als edit.
ich weiß, es wird null sein, brauche ich die Daten in temp-array in der main-Methode. Gibt es eine Möglichkeit, dies zu tun?
Java nur übergeben Referenz durch Wert, so dass Sie nicht ändern können, ein argument der Art und Weise, die Sie vorschlagen.
InformationsquelleAutor upv | 2012-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie dieses verwenden:
oder
Warum kann man nicht zurückgeben
byte[]
? Mit foo wissen, welche Größe sollte es sein ideal ist, sehe ich nicht ein problem mit ihm.InformationsquelleAutor Ankur
Bist du nicht sehr klar in deinen code, aber wenn ich verstehe Sie richtig, Sie haben so etwas wie die folgenden:
Ist dies ein korrektes Verständnis von dem, was du sagst, das problem ist, dass die temp ist eine Referenz an nichts. Senden, die einen Verweis zu einer anderen Methode eine Kopie der Referenz (anstelle der Verwendung der gleichen Referenz), daher ändern, dass die Referenz (die Zuweisung an die parameter-variable) nur änderungen, die es für den lokalen Methode. Was Sie tun müssen, ist, um wieder eine neue
byte[]
von der Methode, wie diese:- und nennen es wie folgt:
byte[] temp = methodThatAllocatesByteArray()
. Oder können Sie initialisieren das array zuerst, dann übergeben Sie die Referenz auf das array der anderen Methode wie diese:Da in diesem Fall die parameter in
methodThatAllocatesByteArray
zeigen auf dasselbe array wietemp
alle änderungen (andere als neu zugewiesen werden, sodass es zu einem anderen array oder null), wird zugänglich durchtemp
.Ich fürchte, ich habe zum zweiten Peter Lawrey; warum kann nicht wieder ein
byte[]
? Und irgendwann müssen Sie wissen, wie groß das array ist, sollte es eine Möglichkeit zu ermitteln, von wo aus Sie anrufen. Die Art und Weise Sie dies tun wollen ist einfach unmöglich, es sei denn, Sie ändern möchten, um eine andere Sprache (wie C). Sie müssen uns sagen, was Ihre einschränkenden Faktoren sind jedoch, wenn Sie wollen, dass wir arbeiten um Sie herum. Ihren API eingefroren? Wenn ja, müssen Sie möglicherweise initialisieren Sie das array mit einem Wert, den Sie wissen, ist MINDESTENS groß genug ist, dann behandeln Sie die erstenull
Wert als das Ende.InformationsquelleAutor Thor84no