Я не уверен, что «буфер» — это то, что я ищу, поэтому я покажу вам свою проблему, а затем вы, ребята, сможете решить, правильное ли это слово и какое решение. В настоящее время я работаю над созданием сетевого порта для класса Java DataOutputStream в C#. Последнее, что мне нужно сделать, это решить эту проблему с отправкой сегментированной информации.
Вот мой метод WriteInt на C# (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()" до того, как данные будут отправлены на сервер или клиент; Однако оказывается, что BinaryWriter автоматически сбрасывается всякий раз, когда вы вызываете «Write()».
Вот код "ReadInt()" на Java.
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 # несколько дней назад и, возможно, задаю глупый вопрос.