c语言sscanf函数的用法是什么
363
2022-11-16
Java IO及BufferedReader.readline()出现的Bug
目录java IO及BufferedReader.readline()的BugIO流BufferedReader.readline()方法Bug源码使用BufferReader类的readLine()方法注意问题BufferReader类的readLine()方法DataInputStream类的readUTF()方法
Java IO及BufferedReader.readline()的Bug
IO流
流:流是一组有序的,有起点和终点的字节集合,是对计算机中数据传输的总称。即数据在两个设备间的传输称为流,流的本质是数据传输。
BufferedReader.readline()方法Bug
错误代码:
File testTxt = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/test.txt");
File file_copy3 = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resqAraBKources/test_copy3.txt");
BufferedReader bufferedReader = new BufferedReader(new FileReader(testTxt));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file_copy3));
//readLine() 每次读取一行
while (bufferedReader.readLine() != null){
System.out.println(bufferedReader.readLine());
bufferedWriter.write(bufferedReader.readLine());
}
bufferedWriter.close();
bufferedReader.close();
结果:
结果控制台只打印了第二行,最后还报错了空指针异常
原因:
是代码中每次调用readline()方法,就会向下读取一行所以错误代码中表示的是while 判断 的第一行不为null,打印的是第二行 ,然后写入的是第三行,在次while判断的是第四行 有内容,打印的是第五行 为null,写入的是第六行也为null,就导致了空指针异常。
修改后的代码:
String line;
while ((line = bufferedReader.readLine()) != null){
System.out.println(line);
bufferedWriter.write(line);
}
结果:
源码
使用BufferReader类的readLine()方法注意问题
BufferReader类的readLine()方法
public String readLine():直到程序遇到了换行符或者是对应流的结束符,该方法才会认为读到了一行,才会结束其阻塞,让程序继续往下执行。
注意:读取到没有数据时就返回null(因为其它read()方法当读到没有数据时返回-1),而实际上readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null。
读取一个文本行,通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:到达流末尾,就返回null。
注意:当循环读取文件内容时,循环条件的结束要注意使用正确。
错误的使用方式:
String valueString = null;
while (bf.readLine()!=null){ //这样会造成数据丢失,因为在这里已经调用了readLine()方法,已经读取http://了一行,下次调用时,就会丢失一行。
System.out.println(valueString);
}
正确的解决方法:用一个变量来接收方法的返回值
String valueString = null;
while ((valueString=bf.readLine())!=null){ //通过变量来接收数据,避免数据丢失
System.out.println(valueString);
}
DataInputStream类的readUTF()方法
readUTF读取的必须是writeUTF()写下的字符串。即DataOutputStream的 writeUTF(String str)方法配套使用
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~