使用BufferedReader.read()处理'file'的结尾

时间:2013-03-21 02:40:49

标签: java sockets

我有一个客户端服务器程序,必须将文件的内容作为字符串发送,并且无法决定如何结束包含BufferedReader.read方法的while循环。我的代码为:

while((c = in.read()) != -1){                             
    fw.write((char)c);
    System.out.print((char)c);
}

但是因为它使用套接字,所以在套接字关闭之前它永远不会达到-1。我无法弄清楚while循环的结束条款。有什么特别的人物吗?

跟着:

while((line = in.readLine()) != null && !line.equals(BasicProtocol.SENDING_FILE_DONE))

其中SENDING_FILE_DONE是添加到流末尾的String。这不是一个好方法,但必须采用这种方式(我相信),当数据必须是String时。

2 个答案:

答案 0 :(得分:1)

  

我有一个客户端服务器程序,必须将文件的内容作为字符串

发送

为什么呢?馊主意。它应该以字节形式发送。否则,您将面临数据损坏的风险。

  

我无法决定如何结束包含BufferedReader.read()方法的while循环

  1. 你根本不应该使用BufferedReader,你应该使用BufferedInputStream,以避免假设文件包含文本。
  2. 你应该在文件之前发送文件大小,然后你应该读取文件大小,然后循环,直到你读完了那么多字节,或者你应该在发送文件后关闭套接字。

答案 1 :(得分:-1)

如果您使用的是BufferedReader,您可以一次尝试读取整行...

String line;
while((line = in.readLine()) != null) {
  // your code here
}