Java的流中为什么BufferedReader要写入一个newLine()才能换行
publicstaticvoidmain(Stringargs[]){Stringb;try{BufferedReaderre=newBufferedReader(new...
public static void main(String args[])
{
String b;
try {
BufferedReader re=new BufferedReader(new FileReader("E:\\Student.java"));
BufferedWriter wr=new BufferedWriter(new FileWriter("F:\\FileStudent.java"));
while ((b=re.readLine())!=null) {
wr.write(b);
wr.newLine();
System.out.println(b);
}
wr.flush();
re.close();
wr.close();
} catch (FileNotFoundException e) {
// TODO: handle exception
System.out.println("找不到文件!");
System.exit(-1);
}catch (IOException e) {
// TODO: handle exception
System.out.println("文件复制失败!");
System.exit(-1);
}
System.out.println("文件复制成功!");
}
Java的流中为什么BufferedReader要写入一个newLine()才能换行,而字符流,字节流,不需要写他自己就能换行
public static void main(String args[])
{
int b;
FileReader re=null;
FileWriter fi=null;
try {
re=new FileReader("E:\\Student.java");
fi=new FileWriter("F:\\FileStudent.java");
while ((b=re.read())!=-1) {
fi.write(b);
}
re.close();
fi.close();
} catch (FileNotFoundException e) {
// TODO: handle exception
System.out.println("找不到文件!");
System.exit(-1);
}catch (IOException e) {
// TODO: handle exception
System.out.println("文件复制失败!");
System.exit(-1);
}
System.out.println("文件复制成功!");
}
Java的流中为什么BufferedReader要写入一个newLine()才能换行,而字符流,字节流,不需要写他自己就能换行 展开
{
String b;
try {
BufferedReader re=new BufferedReader(new FileReader("E:\\Student.java"));
BufferedWriter wr=new BufferedWriter(new FileWriter("F:\\FileStudent.java"));
while ((b=re.readLine())!=null) {
wr.write(b);
wr.newLine();
System.out.println(b);
}
wr.flush();
re.close();
wr.close();
} catch (FileNotFoundException e) {
// TODO: handle exception
System.out.println("找不到文件!");
System.exit(-1);
}catch (IOException e) {
// TODO: handle exception
System.out.println("文件复制失败!");
System.exit(-1);
}
System.out.println("文件复制成功!");
}
Java的流中为什么BufferedReader要写入一个newLine()才能换行,而字符流,字节流,不需要写他自己就能换行
public static void main(String args[])
{
int b;
FileReader re=null;
FileWriter fi=null;
try {
re=new FileReader("E:\\Student.java");
fi=new FileWriter("F:\\FileStudent.java");
while ((b=re.read())!=-1) {
fi.write(b);
}
re.close();
fi.close();
} catch (FileNotFoundException e) {
// TODO: handle exception
System.out.println("找不到文件!");
System.exit(-1);
}catch (IOException e) {
// TODO: handle exception
System.out.println("文件复制失败!");
System.exit(-1);
}
System.out.println("文件复制成功!");
}
Java的流中为什么BufferedReader要写入一个newLine()才能换行,而字符流,字节流,不需要写他自己就能换行 展开
2个回答
展开全部
首先,字节流是表示所有内容是原始值,不做任何翻译,因为它本身是二进制的,而字符流则不同,它涉及到字符集和操作系统平台的差异,比如换行符在 Windows、xNix 和 Mac OS 上都不相同,这个本身是一个功能需要用户决定要不要执行换行,你始终需要明白,换行这个就像是给要人看的,它不是数据本身,因此这是一个翻译功能而不是数据,是否换行是要看人的需要而定,而对于字节流操作来说是没有换行这个概念的,它只知道都是字节(把换行符当成一个普通的二进制字节)。对于字节,所有东西都应该当成是“数据”,能不变就尽量不变。
到底用字节流还是字符流来处理是要看你想处理什么数据,是否需要其中的某个翻译功能(翻译给人看的,电脑对它不感兴趣)。
比如,当我们复制一份文件时,我们应该把它当成“原始数据”,不应该出现字符集的转换问题,这时就用字节流,而当我们想把它当成文本型字符来处理我们就用字符流并使用明确指定的字符集或隐含的操作系统默认的字符集。
总之,所有想当成原始数据来处理的就应该用字节流。我们并不是因为有一个很直观的 readLine 和 writeLine 方法而选择用 Reader/Writer 而不用 Stream 的。
这里的 Stream 都是字节流,而 Reader / Writer 是字符流。只想简单的复制文件就应该用 Stream,只有当想转换字符集或在其中插件一些字符或翻译内容时(这时所有数据应该当成文本字符而不是字节处理)时我们才用 Reader / Writer。
像你说的用 Stream 来处理时不需要明确地 newLine 就有了换行,那也是因为 Reader.readLine 本身把换行符当成分隔符而不是数据,在读取之后把这个分隔符去掉了只保留了数据部分,因此 readLine 得到的那个字符串不包括换行符,因此把它写到另一个文件中时就少了换行符。
到底用字节流还是字符流来处理是要看你想处理什么数据,是否需要其中的某个翻译功能(翻译给人看的,电脑对它不感兴趣)。
比如,当我们复制一份文件时,我们应该把它当成“原始数据”,不应该出现字符集的转换问题,这时就用字节流,而当我们想把它当成文本型字符来处理我们就用字符流并使用明确指定的字符集或隐含的操作系统默认的字符集。
总之,所有想当成原始数据来处理的就应该用字节流。我们并不是因为有一个很直观的 readLine 和 writeLine 方法而选择用 Reader/Writer 而不用 Stream 的。
这里的 Stream 都是字节流,而 Reader / Writer 是字符流。只想简单的复制文件就应该用 Stream,只有当想转换字符集或在其中插件一些字符或翻译内容时(这时所有数据应该当成文本字符而不是字节处理)时我们才用 Reader / Writer。
像你说的用 Stream 来处理时不需要明确地 newLine 就有了换行,那也是因为 Reader.readLine 本身把换行符当成分隔符而不是数据,在读取之后把这个分隔符去掉了只保留了数据部分,因此 readLine 得到的那个字符串不包括换行符,因此把它写到另一个文件中时就少了换行符。
追问
你好,照你这么说那单纯的字符流也应该有newLine呀为什么没有,只有带缓冲区的字符流才有
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |