哪位大牛能给我通俗的解释下java中的流啊,看了很多资料,还是不理解啊?

1,为什么一定要搞出个流呢,程序不能直接向比如文件中读或写文件吗,为什么一定搞出个流出来呢?能把流理解成是一个缓冲区吗,平衡内存和外存的速度差异,因为内存快,外存慢?
2、为什么又要分出那么多种流呢,比如弄个输入流,输出流,怎么又弄出个缓冲流,输入流,输出流不也是为了缓冲吗,否则干嘛要用流呢?其他的什么文件流,转换流,对象流,我更是一头雾水。
刚开始学java,希望能通俗的概念的解释下,我是菜鸟。
最新回答
夜雨入梦

2024-02-16 02:45:47

为什么要用流,我不解释了,网上多的很。

你把流理解成管道就容易多了。

java io 的设计模式就是一种装饰模式,将基本的io流不断的包装,形成功能更加强大,操作更加方便的io流。
当然,用字节流FileInputStream/FileOutputStream 是可以处理所有问题的,但是它读取的数据是字节,当我们处理文本的时候,常常是直接处理一个一个的文字或是一行一行的处理,显然字节就不能满足需求了。
也就是说当不能满足实际需求的时候,就要将基本流进行包装,扩展功能,方便操作。

比如 new BufferedInputStream(new FileInputStream(new File("xxxxx")))
可以理解成一个小的管道,套在一个大的管道中,(一个大的管道在继续套更大的管道)
关于IO的操作,其实蛮固定液蛮简单的。要是这个io动了,可以看看nio(new io),里面就是用的通道。

java io是java的核心,不管你以后做web还是cs,必须的。

装饰模式跟你穿衣服是一个道理的,可能穿一件不太好看,拿就搭个外套
一件太冷了,就多穿几件。

还有,在io中,通常是用多态来操作的
如:
Reader in=new BufferedReader( //包装一个字符流

new InputStreamReader( //包装一个转换流 字节-->字符

new (BufferedInputStream( //包装一个缓冲流

new FilterInputStream( //包装一个字节流

new File("xxxx")))))) //包装一个文件

而是用的,通常是Reader的 read(char[] cbuf,int off,int len)
即 in.read(xxxxxx);

当然,这个例子有点BT了,但是看包装就简单多了,就一层套一层,一层套一层,大的套小的,
大的套小的
作业君是个傲娇的东西

2020-08-14 02:58:57

计算机是以二进制存储文件的,就是0,1。流分字符流和字节流两种,字节流就是以byte为单位的,你可以把一张图片转换为字节数组,你也可以把一个文本文件转换为字节数组等。而字符流(InputStream,OutputStream)是以字符为单位,你要操作一些文本信息还是很方便的(Reader,Wirter)。没有那么乱,慢慢学别着急。
k好菇凉

2023-06-05 03:55:07

直接读写,不够方便。流并不是缓冲区,有的流就不缓冲。标准错误就不应缓冲。流多,我也烦,但你用不到不代表别人用不到。多种流的串接组合,形成丰富的功能。
紫南

2021-01-26 12:17:28

个人认为,你不要着急,因为你才刚开始学,坚持学下去,慢慢你就明白了