1. #1

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

    Standard [Java] PacketWriter

    Code:
    import java.io.UnsupportedEncodingException;
    
    /**
     *
     * @author Flav
     */
    public class PacketWriter {
    	private StringBuilder buffer;
    
    	public PacketWriter() {
    		buffer = new StringBuilder();
    	}
    
    	public void write(int v) {
    		buffer.append((char) v);
    	}
    
    	public void writeBoolean(boolean v) {
    		write(v ? 1 : 0);
    	}
    
    	public void writeShort(int v) {
    		write(v >> 8);
    		write(v);
    	}
    
    	public void writeString(String v) {
    		writeString(v, false);
    	}
    
    	public void writeString(String v, boolean length) {
    		if (length) {
    			write(v.length());
    		}
    
    		buffer.append(v);
    	}
    
    	public String toString() {
    		return buffer.toString();
    	}
    }
    Die Klasse PacketWriter dient zum Darstellen von Paketen, sowohl für das alte Protokoll mit Tokens und Delimiter als auch für das Neue. Vor allem beim neuen Protokoll kann man auf eine solche Klasse kaum verzichten.

    Beispiel

    e\0Cool\0Flav\0Hallo.

    Code:
    PacketWriter packet = new PacketWriter();
    packet.writeString("e");
    packet.write(0x00);
    packet.writeString("Cool");
    packet.write(0x00);
    packet.writeString("Flav");
    packet.write(0x00);
    packet.writeString("Hallo.");
    groupChat.receive(packet.toString());
    Geändert von Flav (02.02.2012 um 16:35 Uhr)

  2. #2

    Registriert seit
    19.12.2011
    Beiträge
    356
    Thanked 164 Times in 101 Posts

    Standard AW: [Java] PacketWriter

    Darf ich fragen warum du bei der Funktion Write nicht gleich als Parameter ein Char nimmst? Würde glaube ich am Ende auch helfen, verwirrung zu vermeiden.

  3. #3

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

    Standard AW: [Java] PacketWriter

    Hast du völlig recht, kann man machen, hab ich nicht dran gedacht damals (die Klasse ist schon mindestens ein halbes Jahr alt).

    Edit: Geht doch nicht, dann muss man beim Übergeben des Parameters zu char casten.
    Geändert von Flav (02.02.2012 um 16:34 Uhr)

  4. #4

    Registriert seit
    19.12.2011
    Beiträge
    356
    Thanked 164 Times in 101 Posts

    Standard AW: [Java] PacketWriter

    Kann man eigentlich keine Ints/Longs reinschreiben oder hast du dazu einfach keine Funktion geschrieben. habe vor die nochmal in C# umzuschreiben, deswegen frage ich.

  5. #5

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

    Standard AW: [Java] PacketWriter

    Code:
    public void writeInt(int v) {
    	write(v >> 24);
    	write(v >> 16);
    	write(v >> 8);
    	write(v);
    }
    Long ist selbstverständlich auch möglich, hab aber beides bisher noch nicht gebraucht bei Knuddels (nur bei Beach). Und ja, die Klasse kann auch für Beach verwendet werden.

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

    Standard AW: [Java] PacketWriter

    Falls es wer braucht eine erweiterte Version des PacketWriters. Diese fügt nach einem Write normal das Nullchar hinzu, sollte dies nicht erwünscht sein kann man als 2ten Parameter falls übergeben.
    Ansonsten die writeInt hinzugefügt.

    PHP-Code:
    public class PacketWriter {
        private 
    StringBuilder buffer;

        public 
    PacketWriter() {
            
    buffer = new StringBuilder();
        }

        private 
    void write(int v) {
            
    buffer.append((charv);
        }

            public 
    void writeChar(char c) { writeChar(c,true); }
            public 
    void writeChar(char cboolean writeNull) {
                
    write(c);
                if(
    writeNull)
                    
    write(0x00);
            }
            
            
            public 
    void writeint(int v) { writeInt(v,true); }
            public 
    void writeInt(int vboolean writeNull) {
                
    write(>> 24);
                
    write(>> 16);
                
    write(>> 8);
                
    write(v);
                if(
    writeNull)
                    
    write(0x00);
            }
            public 
    void writeBoolean(boolean v) { writeBoolean(v,true); }
        public 
    void writeBoolean(boolean vboolean writeNull) {
                    
    write(0);
                    if(
    writeNull)
                        
    write(0x00);
        }

            public 
    void writeShort(int v) { writeShort(v,true); }
        public 
    void writeShort(int vboolean writeNull) {
            
    write(>> 8);
            
    write(v);
                    if(
    writeNull)    
                        
    write(0x00);
        }

            public 
    void writeString(String v) { writeString(v,true); }
        public 
    void writeString(String vboolean writeNull) {
            for(
    char c v.toCharArray()) {
                        
    write(c);
                    }
                    if(
    writeNull)
                        
    write(0x00);
        }

        

            @
    Override
        
    public String toString() {
            return 
    buffer.toString();
        }


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