Ich schreibe eine App-Transfer-Datei-basierte Socket.Wenn ich Datei weniger als 10 MB übertragen, dann egal was passiert.Aber wenn ich Datei über 20mb, dann bekomme ich aus Speicherfehler und crash meine App.ByteArrayOutputStream Out of Memory Fehler beim Senden über Socket
Dies ist mein Code
RandomAccessFile aFile = new RandomAccessFile(path, "r");
FileChannel inChannel = aFile.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int n;
while ((n = inChannel.read(buffer)) > 0) {
buffer.flip();
total_length += n;
baos.write(buffer.array(), 0, n);
byte[] aaa = baos.toByteArray();
ObjectStream obstream = new ObjectStream("stream", aaa, session_request, total_length);
aaa=null;
outt.writeObject(obstream);
obstream = null;
baos.reset();
buffer.clear(); // do something with the data and clear/compact it.
}
inChannel.close();
aFile.close();
Dieser Fehler ist, die tierten:
FATAL EXCEPTION: Thread-177
java.lang.OutOfMemoryError
at java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:122)
at com.jsc.Remote2Droid.Thread.ThreadClientData.run(ThreadClientData.java:705)
an der Stelle aus dem Speicher:
byte[] aaa = baos.toByteArray();
Bitte helfen Sie mir meine code.Thank zu beheben alle .Entschuldigung für mein Englisch.
Ich sende nur einen kleinen Puffer mit der Größe ist 1024. – user3625981
In der Tat. Jetzt sehe ich. Aber warum so kompliziert? Entfernen Sie den ByteArrayOutputStream. Weg mit dem ObjectStream. Machen Sie einen Puffer zu einem Byte-Array. Ist outt der Socket-Ausgangsstrom? Lassen Sie es die Bytes im Puffer schreiben. – greenapps