나는 "Buffer"가 내가 원하는 것을 확신하지 못하기 때문에 내 문제를 보여줄 것이고, 그러면 여러분은 그 단어가 올바른 단어인지 해결책인지를 결정할 수 있습니다. 현재 C#에서 Java DataOutputStream 클래스의 네트워킹 포트를 만드는 중입니다. 마지막으로해야 할 일은 분할 된 정보를 보내는 것으로이 문제를 해결하는 것입니다.세그먼트를 보내는 C# BinaryWriter 버퍼?
가 여기에 C#에서 내 내의 writeInt 방법의 비교하고자하는 사람들을위한
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);
}
(ClientOutput는 BinaryWriter의 인스턴스입니다); 여기 의 원본 데이터가 서버 또는 클라이언트로 전송 될 것입니다 전에 "()세척"을 호출하는 자바 자바에서 일반적으로
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);
}
당신이 가지고있는 것입니다; 그러나 당신이 "쓰기()"를 호출 할 때마다 BinaryWriter가 자동으로 플러시 것으로 보인다
여기 자바에서 "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));
}
자바 코드가 서버에서 호출 "내의 writeInt"와 ReadInt에 실행되면, 값이 제대로 표시; 그러나 현재 서버는 정수를 4 번 처리하고 세그먼트를 기준으로 정수 값을 표시합니다.
예 입력 (C#을) :
Client.WriteInt(1000);
예 출력 (자바) : 출력해야하는 경우
0
0
50331648
-402653184
:
1000
참아주세요 내가 방금 C# 몇 가지를 집어 들었다. 며칠 전 바보 같은 질문을하고있는 것 같습니다.
'uint'로 캐스팅 한 유일한 이유는 java로 작성된 원래 라이브러리가 부호없는 교대를 사용했기 때문입니다. 나는 그 방법을 지키기 위해 이유가 있다고 생각했습니다.일단 집에 돌아와서 제대로 작동하는지 확인해보고 나서이 도구를 사용해 보겠습니다. – Hobbyist
완벽하게 작동합니다. 감사합니다. – Hobbyist