1. #1
    Mitglied
    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
    U-Labs Plus-Mitglied

    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
    Mitglied
    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
    U-Labs Plus-Mitglied

    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
    Mitglied
    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.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191