Java TCP How do you read a sent stream size (header) and keep reading based upon that size

前端 未结 3 542
悲哀的现实
悲哀的现实 2021-01-29 11:07

Given the following pseudo code. how would I do read in the given data

\"enter

相关标签:
3条回答
  • 2021-01-29 11:59

    You can try JBBP

    @Bin class Struct { byte [] payload; }
    @Bin class ParsedStream { Struct [] structs; }
    ParsedStream parsed = JBBPParser.prepare("structs[_] { ushort size; byte [size] payload; }").parse(theInStream).mapTo(ParsedStream.class);
    
    0 讨论(0)
  • 2021-01-29 12:02

    Use DataInputStream to make your life easy.

    DataInputStream in = new DataInputStream(socket.getInputStream());
    short myShortStreamSize = in.readShort();
    byte[] payload = new byte[myShortStreamSize];
    in.readFully(payload);
    
    0 讨论(0)
  • 2021-01-29 12:05

    Socket has a getInputStream() method. You would use the returned InputStream and read myShortStreamSize of bytes from it into a byte[], convert that into a int/long representing your payload size and then read into another, larger, new byte[payloadSize], the payload itself.

    0 讨论(0)
提交回复
热议问题