我不确定我正在寻找“缓冲区”,所以我将向您展示我的问题,然后你们可以决定这是否是正确的词和解决方案。目前我正在为 C# 中的 Java DataOutputStream 类创建一个网络端口。我要做的最后一件事是通过发送分段信息来解决这个问题。
这是我在 C# 中的WriteInt方法( ClientOutput 是 BinaryWriter 的一个实例)
public void WriteInt(int v)
{
ClientOutput.Write (((uint)v >> 24) & 0xFF);
ClientOutput.Write (((uint)v >> 16) & 0xFF);
ClientOutput.Write (((uint)v >> 8) & 0xFF);
ClientOutput.Write (((uint)v >> 0) & 0xFF);
IncCount (4);
}
对于任何想要比较的人;这是Java的原版
public final void writeInt(int v) throws IOException {
out.write((v >>> 24) & 0xFF);
out.write((v >>> 16) & 0xFF);
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(4);
}
通常在java中你必须在数据被发送到服务器或客户端之前调用“ Flush() ”;但是,每当您调用“ Write() ”时,BinaryWriter 似乎都会自动刷新
这是 Java 中的“ ReadInt() ”代码。
public final int readInt() throws IOException {
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0)
throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
}
当Java代码执行到“ WriteInt ”并在服务器上调用ReadInt时,该值正确显示;然而,目前服务器正在处理整数 4 次不同的时间,并根据段显示整数值。
示例输入(C#):
Client.WriteInt(1000);
示例输出(Java):
0
0
50331648
-402653184
当输出应该是:
1000
请多多包涵,因为我几天前刚开始学习 C#,我可能会问一个愚蠢的问题。