gpt4 book ai didi

java - 如何在Java中忽略数据类型读取数据流

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:47 25 4
gpt4 key购买 nike

我正在用Java编写一个客户端-服务器应用程序。流程如下:

  1. 客户端向注册节点发送 HTTP 格式的消息

    • 一个请求行多个标题行
    • 一个空行
    • 还有 body 。
    • (ASCII 文本)
  2. 注册节点向服务器发送类似格式的消息。

  3. 客户端和服务器可以通话(类似于 SIP)。

目前,我已经创建了客户端和服务器的套接字,但是如果我想使用 DataInputStream 和 DataOutputStream 来输入和输出数据,我还需要通过 DataInputStream 中的 readDouble 等方法来确定数据的类型。

我不知道该怎么做。

抱歉,如果我的描述有点含糊,这里是一些将传输的示例消息。

REGISTER john@google.com SIPL/1.0CRLF
To: john@google.comCRLF
From: john@google.comCRLF
Call-ID: a74fbCRLF
CSeq: 0CRLF
Expires: 200CRLF
Contact: 74.125.226.161:20132CRLF
CRLF

SIPL/1.0 200 okCRLF
To: barney@google.comCRLF
From: 74.125.226.161:20300CRLF
Call-ID: 9934bcd2CRLF
CSeq: 10CRLF
Content-Length: 21CRLF
Contact: 74.125.226.161:20305CRLF
CRLF
file=foo
characters=10

任何申请都将不胜感激!!!

最佳答案

由于您正在读取 ASCII 文本,并且必须处理换行符,因此您可以使用读取器和写入器,并使用 java.io.BufferedReader 读取数据,它允许您逐行读取。

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String line = reader.readLine();
StringBuilder buffer = new StringBuilder();
while ( line != null) {
buffer.append(line);
line = reader.readLine();

// you can check here if the line is empty and decide only to read the header
// or to split your header and body into different buffers

}
String fullText = buffer.toString();

如果发送文本数据,也可以使用类似的东西:

PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.println("GET / HTTP/1.1");
writer.println("Header: value");
writer.println(); // end of header
...
writer.flush(); // if you need to flush the buffer before closing
writer.close(); // when done - flushes and closes

将所有内容放在 try-catch-finally block 中,并使用 finally 中的 close() 方法(或者,如果您使用 Java 7,则使用 try-with-resources)

关于java - 如何在Java中忽略数据类型读取数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133383/

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