关于java 缓冲流输入输出的疑惑

问题描述

javaIO中,有专门的缓冲流,但同时操作系统本身也会设置缓冲区来进行输入输出。java的缓冲流是不是多此一举呢。如果除缓冲流外,其他流没有缓冲功能,那这些流的类为什么还有flush方法,来强制输出呢?在我编的一个程序中,使用文件输出流来向一个文件中写数据,如果不加上close方法就写不进去,这是否说明非缓冲流也有缓冲功能呢,这个缓冲功能是依赖于操作系统的缓冲功能得到的。

解决方案

解决方案二:
好高深啊,mark
解决方案三:
像文件中写数据write方法仅仅是将你要写的内容放入到缓存中并没有实际写入到文件,当flush()之后会刷新缓存中的内容,真正把内容写入到文件中,close()方法在关闭输入流之前会清空缓存中的内容,实际效果跟flush()差不多,close()之后就把流也关闭了。
解决方案四:
flush是刷新缓冲区的,不是强制输出的,close是关闭流的
解决方案五:
我可能没说清楚,当使用文件输出流FileWriter时,可以一个一个字符地写入文件。书上明确写着,如果不使用缓冲流,那么就要频繁地写磁盘,浪费时间。但实际上用起来好像也有缓冲啊
解决方案六:
学习.我怎么就没想哪么深入
解决方案七:
Java这边是内存到主板的缓冲,Windows那个不是很清楚但是主板到磁盘,磁盘到磁头还都有缓冲。
解决方案八:
引用4楼wsqcgcty的回复:

我可能没说清楚,当使用文件输出流FileWriter时,可以一个一个字符地写入文件。书上明确写着,如果不使用缓冲流,那么就要频繁地写磁盘,浪费时间。但实际上用起来好像也有缓冲啊

这个是你定义了一个byte[]数组,一般是这样的:byte[]by=newbyte[1024];这样在读取了1024个字节后才往文件里面写数据,如果不到就继续读,flush是刷新缓冲区的,比如读到最后小于1024个字节,调用flush就把剩余的字节全部写进文件
解决方案九:
flush是刷新缓冲区的close是关闭流的
解决方案十:
其实LZ,你去看看NIO吧,NIO就是利用系统本身的缓冲的,所以现在所有旧的IO都已经重写了

时间: 2024-10-22 19:43:54

关于java 缓冲流输入输出的疑惑的相关文章

java IO之 File类+字节流 (输入输出 缓冲流 异常处理)

1. File类 File 路径问题: 上下级文件夹之间使用分隔符分开: 在Windows中分隔符为'\' ,在Unix/Linux中分隔符为'/' 跨平台分隔符: 专业的做法是使用File.separatorChar,这个值会根据系统得到的相应的分隔符. 例:new File("c:"+File.separatorChar+"a.txt"); 注意,如果是使用"\" ,则需要进行转义,写为"\\"才可以     绝对路径与相

java笔记八:IO流之字符流与字符缓冲流

java中字符流主要都是继承于Reader和Writer两个抽象类.用于对字符文本的读写操作.   一.转换类流 1 package com.iotest; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStreamRe

方法-java中关于自己建的一个缓冲流中的问题

问题描述 java中关于自己建的一个缓冲流中的问题 1 import java.io.*; 2 //创建的这个类其实还是调用的FileReader的read方法,所以它会抛出IOException: 3 class MyBufferedReader{ 4 //属性(要想使用这个缓冲流就得先创建一个这个文件流,得把它弄成属性作为一个参数): 5 private FileReader fr; 6 public MyBufferedReader(FileReader fr){ 7 this.fr=fr

字节流-JAVA缓冲字符流在实例化传入的必须是字符流吗?

问题描述 JAVA缓冲字符流在实例化传入的必须是字符流吗? 缓冲字符流在实例化传入的必须是字符流吗?可以传入 InputStream或OutputStream吗? 今天看代码遇到了这样的写法,不知道这种写法对不对,求告知原因! OutputStream os=new FileOutputStream("pw.txt",true); PrintWriter pw = new PrintWriter(os,true); 解决方案 首先你得捕获异常,应该这样 OutputStream os

java笔记七:IO流之字节流与字节缓冲流

在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字节流. 一.InputStream中的读取数据的方法如下: 1 .int read() 功能:读取一个字节的数据,并且返回读到得数据,如果返回-1,则表示读到输入流的末尾. 2.int read(byte[] b) 功能:从输入流中读取一定量的字节,并将其存储在字节数组b中,返回实际读取的字节数,如果返回-

Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54894451 本文出自[赵彦军的博客] InputStream |__FilterInputStream |__BufferedInputStream 首先抛出一个问题,有了InputStream为什么还要有BufferedInputStream? Buffere

Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter

Java IO流学习总结四:缓冲流-BufferedReader.BufferedWriter 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54911237 本文出自[赵彦军的博客] 在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream.BufferedOutputStream介绍了缓冲流中的字节流,而这一篇着重介绍缓冲流中字符流BufferedReader.BufferedWriter.

Java IO: 流

原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) Java IO流是既可以从中读取,也可以写入到其中的数据流.正如这个系列教程之前提到过的,流通常会与数据源.数据流向目的地相关联,比如文件.网络等等. 流和数组不一样,不能通过索引读写数据.在流中,你也不能像数组那样前后移动读取数据,除非使用RandomAccessFile 处理文件.流仅仅只是一个连续的数据流. 某些类似PushbackInputStream 流的实现允许你将数据重新推回

Java IO流系统整理

Java IO流的分类 Java中的流,可以从不同的角度进行分类. 按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图像或声音的二进制数据. 字符流:以字符(16位二进制)为单位进行处理. 都是通过字节流的方式实现的.字符流是对字节流进行了封装,方便操作.在最底层,所有的输入输出都是字节形式的. 后缀是Stream是字节流,而后缀是Reader,Writer是字符流.