请问 为什么 read() 后不用清空 就可以读取文件 而write() 后必须用flush()后才能写文件
到底这个过程是怎么回事 我认为Writer是把数据先写到输出流里 然后必须手动的清空或者关闭流 要写的东西
才能被写到 目的文件中 可是Reader 为什么不用清空 也不用关闭流 就可以度取呢? 难道不是先把读到的东西先放入
流中吗 如果是 那为什么不清空呢?
到底这个过程是怎么回事 我认为Writer是把数据先写到输出流里 然后必须手动的清空或者关闭流 要写的东西
才能被写到 目的文件中 可是Reader 为什么不用清空 也不用关闭流 就可以度取呢? 难道不是先把读到的东西先放入
流中吗 如果是 那为什么不清空呢?
ObjectOutputStream out = new ObjectOutputStream(file);
out.writeObject(user);
out.flush();
......
BufferedWriter(new FileWriter()) 才有吧
对于输入流,当你read的时候你已经得到数据并保存到变量中了,已经达到了实际目的,没必要再去操作缓冲区。
向文件写入数据时,不是直接就将数据向文件中写,而是先写到一个缓存区中,当你将缓冲区写满了,就会自动将缓存中的数据写入到文件中,并将缓存清空,这就是一次刷新的过程。读一下就刷新一次是防止你忘记手动关闭流而采取的策略。因为假设你忘记手动关闭流,而你最后一次缓存区又没有写满,那么这些数据就会一直保存在缓冲区中,而不会写入到文件中。
所以为了以防万一,就每写一次就刷新一次,就可以及时的将数据都写入到文件中
不应该每write一次就flush一次,之所以用缓冲,就是为了提高IO操作的效率,如果每写一次都flush一次,不如不用缓冲,直接写文件好了。
我要问的是 read()不用清空就可以读 这是为什么 这个过程是什么
read()和write() 2个有什么区别 为什么都有缓冲 一个不清空就能读 一个必须清空才能写!
对于read来说,如果缓冲中还有没有读完的数据,为什么要清空缓冲呢?如果读完了缓冲,会自动把新的数据从流中填入缓冲,我是这样理解的。
对于write来说,也是一样,你可以一直writ,缓冲满了会自动把缓冲中的内容写入流。flush的作用就是缓冲还没有满时,把缓冲中的内容写出去。为什么write要flush?,那是因为当缓冲没有写满时,整个写操作结束了,比如程序要终止了,这时要把缓冲中剩余的内容写到流中,如果没有flush方法,缓冲中的内容不会自动写入流。而read就没有清空缓冲的理由。