То, что вы хотите знать, является свойством протокола, который вы используете. Это не свойство языка программирования, который вы используете. Исходя из вашего Java кода, создается впечатление, что вы используете протокол, который отправляет поле длиной 4 байта перед данными сообщения (со знаком / без знака?).
Если это так, вы можете справиться с чтением сообщения Точно так же в Rust: 1. Считайте 4 байта, чтобы получить информацию о длине. 2. Считайте оставшиеся данные. 3. Десериализуйте данные
fn read_message(stream: Read) -> io::Result<String> {
let mut buffer = [0u8; 4];
// Read the length information
stream.read_exact(&mut buffer[..])?;
// Deserialize the length
let size = u32::from_be_bytes(buffer);
// Allocate a buffer for the message
// Be sure to check against a maximum size before doing this in production
let mut payload = vec![0; size];
stream.read_exact(&mut payload[..]).await;
// Convert the buffer into a string
let text = String::from_utf8(payload).map_err(/* omitted */)?;
println!("{}", text);
Ok(text)
}
Это, очевидно, верно только в том случае, если ваш протокол использует префикс длины сообщения с 4-байтовым беззнаковым префиксом int. Это то, что вам нужно проверить.