uncopyable (27.04.2012)
-
27.04.2012, 11:33 #1
java.lang.NegativeArraySizeException
Hallo
Ich hab mal wieder ein Problem in Java..
Ich möchte einen String über Socket senden klappt auch wunderbar nur sobald die lange meines Strings über 127 Zeichen ist bekomme ich eine java.lang.NegativeArraySizeException
PHP-Code:
OutputStream out = socket.getOutputStream();
....
String message = "Dies ist ein String mit 127 Zeichen"; // Beispiel!
String message1 = "Dies ist ein String mit mehr als 127 Zeichen"; // Beispiel!
// senden
send(message.length(),message.getBytes()); Wird gesendet
send(message1.length(),message1.getBytes()); Nicht
private void send(int length,byte[] s) {
try {
out.write(length);
out.write(s);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
// lesen
...
InputStream in = socket.getInputStream();
byte length = (byte) in.read(); //
byte[] bytes = new byte[(int) length];
in.read(bytes); <-java.lang.NegativeArraySizeException
System.out.println(new String(bytes));
while( behappy() ) { code(); }
-
27.04.2012, 11:35 #2
AW: java.lang.NegativeArraySizeException
mach mal erst getBytes()
und davon sendest du die Length
aber das verursacht nicht den Fehler.
Code:The behavior of this method when this string cannot be encoded in the default charset is unspecified. The CharsetEncoder class should be used when more control over the encoding process is required.
Versuche also getBytes("UTF-8");
oder wirklich den CharsetEncoderGeändert von Gnome (27.04.2012 um 11:42 Uhr)
Programmier-Support nur in klar formulierten Threads.
Ich helfe beim Programmieren nicht per PN oder Teamviewer. Sämtliche Anfragen werden ignoriert.
-
27.04.2012, 11:41 #3
AW: java.lang.NegativeArraySizeException
hab ich leider auch schon versucht jedoch der gleiche Fehler..
while( behappy() ) { code(); }
-
27.04.2012, 11:42 #4
AW: java.lang.NegativeArraySizeException
//siehe mein edit
ACHJA, ich verstehe nicht warum du in der send Methode die Length übergibst, wenn du eh die ganzen Bytes rausschreibst... ist also da relativ unnötig
/edit:
Und ich weiß wo der Fehler ist... du kannst nicht einfach so das in.read in Byte umwandeln....
du musst die ersten 4 Bytes lesen und dann in Int konvertieren
Byte hat maximal 256 werte..... da es signed ist.. -128 bis 127.....
Code:public void writeInt(int v) { out.write(v >> 24); out.write(v >> 16); out.write(v >> 8); out.write(v); } public int readInt() { int char1 = in.read(); int char2 = in.read(); int char3 = in.read(); int char4 = in.read(); return ((char1<<24)|(char2<<16)|(char3<<8)|(char4)); }
Geändert von Gnome (27.04.2012 um 11:53 Uhr)
Programmier-Support nur in klar formulierten Threads.
Ich helfe beim Programmieren nicht per PN oder Teamviewer. Sämtliche Anfragen werden ignoriert.
-
The Following User Says Thank You to Gnome For This Useful Post:
Ähnliche Themen
-
Faltvorlage für DIN-lang Umschlag
Von TomatenKetchup im Forum RealLifeAntworten: 1Letzter Beitrag: 03.03.2014, 03:12 -
Win7 Java in Safari ausführen (Fehlermeldung Java nicht installiert)
Von Silverstar im Forum WindowsAntworten: 8Letzter Beitrag: 02.12.2013, 23:41 -
java.lang.ClassNotFoundException: org.apache.derby.jdbc.ClientDriver
Von !lkay im Forum JavaAntworten: 4Letzter Beitrag: 07.11.2013, 19:31 -
java.lang.NoClassDefFoundError: com/sun/deploy/appcontext/AppCont
Von knotenpunkt im Forum Knuddels ProgrammierungAntworten: 0Letzter Beitrag: 28.11.2012, 23:32 -
Video ist immer zu lang
Von x BoooM x im Forum SonstigeAntworten: 0Letzter Beitrag: 21.03.2012, 19:34
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.