Hi Forum,
weiss jemand warum ich hier eine negativ array size exception bekomme?
Empfangen:
Versenden:
Beim empfangen crasht er manchmal (nicht immer), da
offenbar etwas negatives zurück gibt. Wie kann das sein? Es sollte eigendlich eine Exception auslösen wenn nichts mehr da ist was man lesen kann und eine negative Länge sollte eigendlich auch nicht möglich sein?
Bin jetzt schon einige male mit dem Debugger durch gegangen werde aber nicht ganz schlau daraus (zumal das Problem ist, das der Fehler nicht immer auftritt).
Wäre es möglich, das es am Paketverlust liegt wenn ich es über das Netzwerk übertrage?
Blubb ???:L bin an dieser Stelle ein wenig ratlos :autsch:
Grüße + Danke
weiss jemand warum ich hier eine negativ array size exception bekomme?
Empfangen:
Java:
public void writeFile(Socket socket, String fileLocation) throws IOException, InterruptedException{
FileOutputStream fos = new FileOutputStream(createFile(fileLocation));
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
long sizeinByte = dis.readLong();
byte[] byteArray = new byte[(int) sizeinByte];
int length;
byte[] buf;
int received = 0;
while((length = dis.read(byteArray)) >0){
if(length < (sizeinByte-received)){
buf = Arrays.copyOf(byteArray, length);
fos.write(buf);
received+=length;
continue;}
else{
buf = byteArray;
fos.write(buf);
fos.close();
Job job = new Job(newFile, IOController.ID, socket.getInetAddress().toString());
IOController.ID++;
receiverQueue.offer(job);
received = 0;
try{
sizeinByte = dis.readLong();
System.out.println("received: " + sizeinByte);}
catch(Exception e){
break;
}
byteArray = new byte[(int) sizeinByte];
fos = new FileOutputStream(createFile(directory+filename+IOController.ID+format));
}
}
System.out.println("rdy");
}
Versenden:
Java:
public void toByteArray() throws IOException, InterruptedException{
Job receiveJob = senderQueue.take();
FileInputStream inputStream = new FileInputStream(receiveJob.getFile());
DataOutputStream dos = new DataOutputStream(os);
byte[] byteArray = new byte[(int)receiveJob.getFile().length()];
inputStream.read(byteArray);
dos.writeLong(receiveJob.getFile().length());
dos.write(byteArray);
Thread.sleep(200);
}
Beim empfangen crasht er manchmal (nicht immer), da
Java:
sizeinByte = dis.readLong();
offenbar etwas negatives zurück gibt. Wie kann das sein? Es sollte eigendlich eine Exception auslösen wenn nichts mehr da ist was man lesen kann und eine negative Länge sollte eigendlich auch nicht möglich sein?
Bin jetzt schon einige male mit dem Debugger durch gegangen werde aber nicht ganz schlau daraus (zumal das Problem ist, das der Fehler nicht immer auftritt).
Wäre es möglich, das es am Paketverlust liegt wenn ich es über das Netzwerk übertrage?
Blubb ???:L bin an dieser Stelle ein wenig ratlos :autsch:
Grüße + Danke