1. #1
    Avatar von Gnome
    Registriert seit
    14.04.2012
    Beiträge
    75
    Thanked 34 Times in 24 Posts

    Standard [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(
    readNullread(); //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(
    readNullread(); //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(
    readNullread(); //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(
    readNullread(); //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)

  2. The Following User Says Thank You to Gnome For This Useful Post:

    Essah (18.04.2012)

  3. #2

    Registriert seit
    06.11.2011
    Beiträge
    418
    Thanked 686 Times in 246 Posts

    Standard AW: [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;
    	}
    }

  4. #3
    Avatar von Gnome
    Registriert seit
    14.04.2012
    Beiträge
    75
    Thanked 34 Times in 24 Posts

    Standard AW: [Java] PacketReader

    Also ich hatte es getestet, und bei mir lief es einwandfrei.
    Naja vielleicht mag das trotzdem jemand mal testen.

  5. #4

    Registriert seit
    06.11.2011
    Beiträge
    418
    Thanked 686 Times in 246 Posts

    Standard AW: [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.

  6. #5
    Avatar von Gnome
    Registriert seit
    14.04.2012
    Beiträge
    75
    Thanked 34 Times in 24 Posts

    Standard AW: [Java] PacketReader

    Jops... habs mit Int.Min und Int.Max probiert..

Ähnliche Themen

  1. Neuerungen in Java 8
    Von Nuebel im Forum Java
    Antworten: 9
    Letzter Beitrag: 25.12.2018, 02:54
  2. Antworten: 8
    Letzter Beitrag: 02.12.2013, 23:41
  3. Java EE 32 Bit?
    Von Pwned im Forum Java
    Antworten: 2
    Letzter Beitrag: 04.08.2012, 23:08
  4. Ubuntu Sun Java
    Von hYpercrites im Forum Linux
    Antworten: 3
    Letzter Beitrag: 20.06.2012, 15:17
  5. [Java] Timer
    Von rVs14 im Forum Java
    Antworten: 1
    Letzter Beitrag: 16.06.2012, 12:13
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.