Essah (18.04.2012)
Thema: [Java] PacketReader
-
18.04.2012, 19:40 #1
[Java] PacketReader
Anlehnend an Flavs PacketWriter hier ein kleiner Reader (ich habe mich bewusst gegen den StringReader entschieden, da diese Methode hier schneller ist)
Die Klasse liest auch direkt den Nullchar als Trennzeichen mitweg.
PHP-Code:public class PacketReader {
private char[] array;
int pos = 0;
public PacketReader(String string) {
array = string.toCharArray();
}
public char readChar() {
return readChar(true);
}
public char readChar(boolean readNull) {
int i = read();
if(readNull) read(); //null
return (char)i;
}
private int read() {
if(pos>=array.length)
return -1;
int i = (int)array[pos];
pos++;
return i;
}
public boolean readBoolean() {
return readBoolean(true);
}
public boolean readBoolean(boolean readNull) {
int i = read();
if(readNull) read(); //null;
if(i==0)
return false;
return true;
}
public short readShort() {
return readShort(true);
}
public short readShort(boolean readNull) {
int i = 0;
int char1 = read();
int char2 = read();
if(readNull) read(); //null
return (short)((char1<<8)|char2);
}
public int readInt() {
return readInt(true);
}
public int readInt(boolean readNull) {
int i = 0;
int char1 = read();
int char2 = read();
int char3 = read();
int char4 = read();
if(readNull) read(); //null
return ((char1<<24)|(char2<<16)|(char3<<8)|(char4));
}
public String readString() {
char chars;
StringBuilder string = new StringBuilder();
while(true) {
int in = read();
chars=(char)in;
if(chars=='\0' || in==-1)
break;
else
string.append(chars);
}
return string.toString();
}
}
Geändert von Gnome (18.04.2012 um 19:52 Uhr)
-
The Following User Says Thank You to Gnome For This Useful Post:
-
18.04.2012, 20:04 #2
- Registriert seit
- 06.11.2011
- Beiträge
- 418
Thanked 686 Times in 246 PostsAW: [Java] PacketReader
Ich hab' jetzt nur kurz rübergeschaut und bin mir nicht 100% sicher, müsste man mal ausprobieren, aber ich glaube du wirst hier beim Lesen von Short und Integer Probleme mit signed/unsigned haben.
So sieht die PacketReader-Klasse von einem Game Server von mir aus, daran kann man sich sonst auch noch orientieren.
Code:package client.tools.packet; import java.io.UnsupportedEncodingException; /** * * @author Flav */ public class PacketReader { private byte[] buffer; private int off; public PacketReader(byte[] buffer) { this.buffer = buffer; } public byte read() { byte v = buffer[off++]; return v; } public boolean readBoolean() { return read() != 0; } public short readShort() { return (short) (((read() & 0xFF) << 8) + (read() & 0xFF)); } public int readInt() { return ((read() & 0xFF) << 24) + ((read() & 0xFF) << 16) + ((read() & 0xFF) << 8) + (read() & 0xFF); } public String readString(int len) { byte[] bytes = new byte[len]; for (int i = 0; i < len; i++) { bytes[i] = read(); } try { return new String(bytes, "UTF8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } public byte[] getBytes() { byte[] bytes = new byte[buffer.length]; System.arraycopy(buffer, 0, bytes, 0, buffer.length); return bytes; } }
-
18.04.2012, 20:09 #3
AW: [Java] PacketReader
Also ich hatte es getestet, und bei mir lief es einwandfrei.
Naja vielleicht mag das trotzdem jemand mal testen.
-
18.04.2012, 20:27 #4
- Registriert seit
- 06.11.2011
- Beiträge
- 418
Thanked 686 Times in 246 PostsAW: [Java] PacketReader
Hast du es mit den verschiedensten Zahlen zwischen -2147483648 und 2147483647 getestet? Mein Reader sah damals auch so aus und entweder waren es die negativen oder die positiven Zahlen, die ab einen bestimmten Wert nicht mehr korrekt gelesen wurden.
-
18.04.2012, 21:17 #5
AW: [Java] PacketReader
Jops... habs mit Int.Min und Int.Max probiert..
Ähnliche Themen
-
Neuerungen in Java 8
Von Nuebel im Forum JavaAntworten: 9Letzter Beitrag: 25.12.2018, 02:54 -
Win7 Java in Safari ausführen (Fehlermeldung Java nicht installiert)
Von Silverstar im Forum WindowsAntworten: 8Letzter Beitrag: 02.12.2013, 23:41 -
Java EE 32 Bit?
Von Pwned im Forum JavaAntworten: 2Letzter Beitrag: 04.08.2012, 23:08 -
Ubuntu Sun Java
Von hYpercrites im Forum LinuxAntworten: 3Letzter Beitrag: 20.06.2012, 15:17 -
[Java] Timer
Von rVs14 im Forum JavaAntworten: 1Letzter Beitrag: 16.06.2012, 12:13
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.