【问题标题】:Java TCP How do you read a sent stream size (header) and keep reading based upon that sizeJava TCP您如何读取发送的流大小(标头)并根据该大小继续读取
【发布时间】:2014-08-15 17:08:06
【问题描述】:

给出以下伪代码。我将如何读取给定的数据

【问题讨论】:

    标签: java tcp


    【解决方案1】:

    使用DataInputStream 让您的生活更轻松。

    DataInputStream in = new DataInputStream(socket.getInputStream());
    short myShortStreamSize = in.readShort();
    byte[] payload = new byte[myShortStreamSize];
    in.readFully(payload);
    

    【讨论】:

    • @Mrshll187 为什么布赖恩要担心你的反对票?为什么除了你和反对者之外的任何人都应该这样做?
    • @EJP 我假设他是反对者。同样,你为什么担心我的反应?
    • @Mrshll187 因为它曾经、现在都是如此奇怪。为什么提供答案的人会成为数千名投票者中的第一个嫌疑人?如果他是,他为什么要根据要求扭转它?
    【解决方案2】:

    Socket 有一个getInputStream() 方法。您将使用返回的InputStream 并从中读取myShortStreamSize 字节到byte[],将其转换为代表您的有效负载大小的int/long,然后读入另一个更大的new byte[payloadSize],即有效负载本身。

    【讨论】:

      【解决方案3】:

      你可以试试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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        • 2015-02-22
        • 2014-05-28
        • 2017-03-13
        • 2015-02-05
        • 1970-01-01
        相关资源
        最近更新 更多