gpt4 book ai didi

java - 实现前缀模式

转载 作者:行者123 更新时间:2023-12-02 00:03:53 24 4
gpt4 key购买 nike

我正在开发一个服务器客户端应用程序。服务器是用Java(PC)完成的,客户端是用Java完成的。 (安卓)

我在执行以下实现时遇到问题:

Server grabs bitmap -> raw bytes -> TCP -> Client (Async Streams

现在字节数组在客户端以多个不同长度的数据包传递。因此,为了正确处理这个问题,我应该使用前缀方法。

To use prefix mode you need to send the length of the message in bytes as four bytes and then the message

我的代码

public void sendScreenshot(byte[] buffer) throws IOException {
OutputStream os = socket.getOutputStream();
os.write(buffer.length + 1);
os.write((byte) 0);
os.write(buffer, 0, buffer.length);
os.flush();
}

在 VB.net 中,这是通过以下代码实现的:

Private Sub dat(ByVal dat As String)
Dim nstream As NetworkStream = sock.GetStream()
Dim bit As Byte() = System.Text.Encoding.UTF8.GetBytes(dat)
Dim bw As New BinaryWriter(sock.GetStream())
bw.Write(bit.Length + 1)
bw.Write((byte)command)
bw.Write(bit, 0, bit.length)

End Sub

欢迎任何在 Java 中实现它的帮助?

最佳答案

使用 DataOutputStream :

DataOutputStream out = new DataOutputStream(os);
out.writeInt(buffer.length + 1);
// This writes a single byte
out.write(0);
out.write(buffer);
out.flush();

这里的.writeInt()来自您引用的这部分文本:

you need to send the length of the message in bytes as four bytes

这意味着一个int。请注意,这将按网络顺序写入 int。虽然您的摘录中未指定这一点,但我认为这是预期的。

同样,在接收端,您可以使用DataInputStream ,将长度读取为 int,然后读取有效负载。

关于java - 实现前缀模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com