黑马程序员技术交流社区

标题: IO的问题 [打印本页]

作者: 陈中岩    时间: 2013-4-14 02:26
标题: IO的问题
本帖最后由 陈中岩 于 2013-4-14 08:01 编辑
  1. 根据毕老师视频中自定义输入流部分
  2. 自己做了些改动,无意间发现问题,百思不得其解,问题标在程序中

  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.Reader;

  6. public class Demo {

  7. public static void main(String[] args) throws Exception{
  8. File file = new File("src/Demo.java");
  9. MyReader mr = new MyReader(new FileReader(file));
  10. String len = null;
  11. while ((len = mr.myreadLine()) != null) {
  12. System.out.println(len);
  13. }
  14. }
  15. }
  16. class MyReader {
  17. private Reader r;
  18. private int count;

  19. public MyReader(Reader r) {
  20. this.r = r;
  21. count = 0;
  22. }

  23. public String myreadLine() throws Exception {
  24. StringBuilder sb = new StringBuilder();
  25. ++count;
  26. sb.append(count+": ");//这里只添加了3个数据
  27. int ch = -1;
  28. while ((ch = r.read()) != -1) {
  29. if (ch == '\r') {
  30. continue;
  31. }
  32. else if (ch == '\n') {
  33. return sb.toString();
  34. }
  35. sb.append((char) ch);
  36. }
  37. if (sb.length() > 4) {//这里搞不懂为什么要大于4呢,如果写大于3的话,程序就会一直打印数字和": "
  38. return sb.toString();
  39. }
  40. return null;
  41. }
  42. }
复制代码

作者: ①人←①城市    时间: 2013-4-14 07:52
因为sb的长度为4,如果写大于3,则返回sb.toString(),而不是null,
main方法中:
while ((len = mr.myreadLine()) != null) {
   System.out.println(len);
}
会出现死循环

作者: 黑马伍哲沂    时间: 2013-4-14 07:59
经过验证,并没有出现你说的问题。我用3没问题。用2就会有问题。
如图:

未命名.jpg (48.95 KB, 下载次数: 17)

未命名.jpg

作者: 陈中岩    时间: 2013-4-14 08:01
下次我会注意注释格式的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2