使用BufferedReader.read()处理'文件'结尾
问题描述:
我有一个客户端服务器程序,它必须发送一个文件的内容作为一个字符串,并且无法决定如何结束包含BufferedReader.read方法的while循环。有代码:使用BufferedReader.read()处理'文件'结尾
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是被添加到该流的结尾的字符串。这不是一个好的方法,但必须以这种方式(我相信),当数据必须是一个字符串。
答
如果您正在使用的BufferedReader,你可以尝试阅读整条生产线,一气呵成..
String line;
while((line = in.readLine()) != null) {
// your code here
}
答
客户端服务器程序我有必须发送一个文件的内容作为字符串
为什么?馊主意。它应该以字节形式发送。否则,您将面临数据损坏的风险。
和我无法决定如何结束含有
BufferedReader.read()
方法while循环
- 你不应该使用
BufferedReader
可言,你应该使用BufferedInputStream
,避免假定该文件包含文本。 - 您应该在文件之前发送文件大小,并且您应该读取文件大小,然后循环,直到您已经精确读取了许多字节,或者您应该在发送文件后关闭套接字。
我还没有做到这一点,所以我不知道为什么在写入到套接字时到达文件末尾时写入-1? – Thihara 2013-03-21 02:44:53
你尝试in.readLine(),如果它工作,那么你只需要检查空? – 2013-03-21 02:45:20
@Thihara没有工作我害怕 – Titus 2013-03-21 02:49:21