【发布时间】:2009-06-25 15:19:05
【问题描述】:
第三方程序允许我从他的 ip:port 询问数据。我通过这个经典代码询问这些东西。这是我的连接类的构造函数:
public TcpConnection(String adress, Integer port) {
this.adress = adress;
this.port = port;
try {
socket = new Socket(adress, port);
System.out.println("Opening connection");
out = new PrintWriter(socket.getOutputStream(), true);
InputStream r = new DataInputStream(socket.getInputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
// TODO: handle exception
} catch (IOException e) {
e.printStackTrace();
}
}
然后我在 while 循环中使用 in.read() 读取我的套接字。
它允许我通过 int 读取套接字 int,但我需要更精细的粒度。 (答案中的一些信息以 2 个字节编码,一些以位编码,一些以 64 个字节编码......)。所以我需要读 2 个字节,然后读一点。然后是另一个位,然后是 1 个字节并检查该字节的每一位。
首先我在想:“好吧,我将得到的 int 转换为字符串二进制表示”,
(通过Integer.toBinaryString(whatIget))
但它只是愚蠢且容易出错。
我确定我缺少一些东西来解决这个偶然的问题。 有什么想法吗?
Edit2:我删除了“当我读取 int 时,我读取 32 位(4 个字节)”,因为这是错误的,而不是问题的重点。因此,Reader.read() 读取的是一个 int,如果这个方法只读取一个字节,她正在读取一个 1/4 int ??!?
【问题讨论】:
-
编辑:我想读一点。 0 或 1。不是 byte 或 int 或其他花哨的类型。我需要它,因为我读取的流中的某些位是标志(例如:第一个字节的第三位表示投影仪是否打开。第二个如果投影仪正在运行,第一个如果 ...)