繁体   English   中英

替代BufferedReader中的readLine()方法?

[英]alternative to readLine() method in BufferedReader?

我是java网络编程的新手。我在谷歌搜索TCP客户端的代码。我遇到了以下示例。

import java.lang.*;
import java.io.*;
import java.net.*;

class Client {
   public static void main(String args[]) {
      try {
         Socket skt = new Socket("localhost", 1234);
         BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));
         System.out.print("Received string: '");

         while (!in.ready()) {}
         System.out.println(in.readLine()); // Read one line and output it

         System.out.print("'\n");
         in.close();
      }
      catch(Exception e) {
         System.out.print("Whoops! It didn't work!\n");
      }
   }
}

客户似乎一次只读出一行数据? 我正在连接到一个流式传输OpenFlow数据包的服务器。下面给出了OpenFlow数据包的wireshark屏幕截图。

[http://www.openflow.org/downloads/screenshot-openflow-dissector-2008-07-15-2103.jpg][1]

一旦我收到完整的数据包,我想将其转储到一个文件,然后稍后使用wireshark读取它。在上面的代码中,他们使用calss BufferedReader来读取“行”中的数据? 至少这就是我理解它的方式。在某种程度上,我可以获得完整的数据包,然后将其写入文件?

读者可以使用文本数据。 如果您正在使用二进制数据(从该屏幕截图中并不完全清楚),您应该使用某种类型的Stream( InputStream或可能是DataInputStream )。 不要只是在网上寻找随机的例子,试着找到那些实际适用于你感兴趣的事情。

另外,不要使用InputStream.available ,它几乎没用。 就像使用它的任何示例代码一样。

此外,一个简单的谷歌搜索“OpenFlow java”有一些有趣的点击。 你确定你需要从头开始写东西吗?

不,但有些库提供了这样的功能。 参见例如番石榴

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/ByteStreams.html

如果您不想(或不能)使用库,您应该使用这样的流

List<String> lst = new ArrayList<String>();
String line;
while ((line = in.readLine()) != null) {
   lst.add(line);
}

要么

String str = "";
String line;
while ((line = in.readLine()) != null) {
   str += line + "\n";
}

请注意,BufferedReader.readLine()方法将为换行符('\\ n')提供一个新行。 如果InputStream是二进制文件,则应使用字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM