Ich arbeite an Transferdatei von Server zu Client Beispiel. Wenn ich versuche, große Datei zu übertragen (in Beispiel ich habe 500MB Video-Datei) dann zeigt es Fehler Android: java.lang.OutOfMemoryError Konnte eine 360318346 Byte-Zuweisung mit 5802592 freien Bytes und 87MB bis OOM zuordnen. Bitte helfen Sie mir, diesen Fehler zu beheben.Android: java.lang.OutOfMemoryError Konnte eine 360318346 Bytezuweisung mit 5802592 freien Bytes und 87MB nicht zuordnen, bis OOM
Server-Seite einige Frieden Code
public class FileTxThread extends Thread {
Socket socket;
FileTxThread(Socket socket){
this.socket= socket;
}
@Override
public void run() {
File file = new File(Environment.getExternalStorageDirectory(),"RAHASYA.mp4");
byte[] bytes = new byte[(int) file.length()];
BufferedInputStream bis;
try {
bis = new BufferedInputStream(new FileInputStream(file));
bis.read(bytes, 0, bytes.length);
OutputStream os = socket.getOutputStream();
os.write(bytes, 0, bytes.length);
os.flush();
// socket.close();
final String sentMsg = "File sent to: " + socket.getInetAddress();
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,sentMsg,Toast.LENGTH_LONG).show();
}});
Client-Seite einige Frieden Code
private class ClientRxThread extends Thread {
String dstAddress;
int dstPort;
ClientRxThread(String address, int port) {
dstAddress = address;
dstPort = port;
}
@Override
public void run() {
Socket socket = null;
try {
socket = new Socket(dstAddress, dstPort);
out.println("Sockt "+socket.getInetAddress());
File file = new File(Environment.getExternalStorageDirectory(),"RAHASYA.mp4");
byte[] bytes = new byte[1024];
InputStream is = socket.getInputStream();
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
while (true) {
int bytesRead = is.read(bytes);
if (bytesRead < 0) break;
bos.write(bytes, 0, bytesRead);
// Now it loops around to read some more.
}
bos.close();
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,"Finished",Toast.LENGTH_LONG).show();
}});
wie man ändert. ich bin Anfänger, ich habe verwirrt, wo ich Änderung in meinem Serverseitencode habe bitte helfen Sie mir. Danke! –
ändern Sie dies: byte [] bytes = neues Byte [(int) file.length()]; –
Bitte sagen Sie mir, welchen Code ich in dieser Zeile hinzufügen muss byte [] bytes = new byte [(int) file.length()]. Vielen Dank! –