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()才能换行,而字符流,字节流,不需要写他自己就能换行
展开
 我来答
jamxval
2014-06-17 · TA获得超过6821个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1392万
展开全部
首先,字节流是表示所有内容是原始值,不做任何翻译,因为它本身是二进制的,而字符流则不同,它涉及到字符集和操作系统平台的差异,比如换行符在 Windows、xNix 和 Mac OS 上都不相同,这个本身是一个功能需要用户决定要不要执行换行,你始终需要明白,换行这个就像是给要人看的,它不是数据本身,因此这是一个翻译功能而不是数据,是否换行是要看人的需要而定,而对于字节流操作来说是没有换行这个概念的,它只知道都是字节(把换行符当成一个普通的二进制字节)。对于字节,所有东西都应该当成是“数据”,能不变就尽量不变。
到底用字节流还是字符流来处理是要看你想处理什么数据,是否需要其中的某个翻译功能(翻译给人看的,电脑对它不感兴趣)。

比如,当我们复制一份文件时,我们应该把它当成“原始数据”,不应该出现字符集的转换问题,这时就用字节流,而当我们想把它当成文本型字符来处理我们就用字符流并使用明确指定的字符集或隐含的操作系统默认的字符集。

总之,所有想当成原始数据来处理的就应该用字节流。我们并不是因为有一个很直观的 readLine 和 writeLine 方法而选择用 Reader/Writer 而不用 Stream 的。

这里的 Stream 都是字节流,而 Reader / Writer 是字符流。只想简单的复制文件就应该用 Stream,只有当想转换字符集或在其中插件一些字符或翻译内容时(这时所有数据应该当成文本字符而不是字节处理)时我们才用 Reader / Writer。

像你说的用 Stream 来处理时不需要明确地 newLine 就有了换行,那也是因为 Reader.readLine 本身把换行符当成分隔符而不是数据,在读取之后把这个分隔符去掉了只保留了数据部分,因此 readLine 得到的那个字符串不包括换行符,因此把它写到另一个文件中时就少了换行符。
追问
你好,照你这么说那单纯的字符流也应该有newLine呀为什么没有,只有带缓冲区的字符流才有
Sephil
2014-06-17 · 知道合伙人IT服务行家
Sephil
知道合伙人IT服务行家
采纳数:616 获赞数:1036
熟悉常用语言和数据库,爱写代码

向TA提问 私信TA
展开全部
流.read方法是按字节读取,只判断有没有读取到数据,不管内容的,所以换行符也会被读出来
而BufferedReader.readLine是按行读取的,即从当前位置一直读取数据,直到遇到换行符,然后去掉换行符,返回读取到的数据
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式