簡體   English   中英

如何在Java中忽略數據類型讀取數據流

[英]How to read data stream ignoring the data type in Java

我正在用Java編寫客戶端服務器應用程序。 步驟如下:

  1. 客戶端使用以下命令向注冊節點發送HTTP格式的消息

    • 請求行,許多標題行
    • 空行
    • 和一個身體。
    • (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與塊close()的方法, finally (或者,如果你使用的Java 7,一試,與資源)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM