Вы просите, чтобы сообщение было проанализировано из целого из buffer
- и я предполагаю, что buffer
имеет длину более 88 байтов.
Я не могу вспомнить вручную, позволяет ли parseFrom
указать максимальный объем данных для чтения, но альтернативой будет:
ByteArrayIntputStream stream = new ByteArrayInputStream(buffer, 0, lenbytes);
EnvInfoProto envInfoProto = EnvInfoProto.parseFrom(stream);
Обратите внимание, что проблема все еще в том, что вы предполагаете, что вы можете прочитать все данные из потока за один вызов read
, что никогда не было хорошей идеей, но отдельный вопрос. Если вы собираетесь закрыть сокет после записи, вы, конечно, можете просто проанализировать поток из сокета InputStream
в коде Java. Если вы не собираетесь закрыть поток, я бы предложил сначала записать длину сообщения в сокет (как 32-разрядное целое число), чтобы вы могли затем прочитать это в Java и прочитать точно правильное объем данных, зная, когда вы закончите.