【Java】基础41:什么叫IO流?

​今天是我自学Java的第41天。

感谢你的观看,谢谢你。

话不多说,开始今天的学习:

image

一、IO流概述

说到IO流,先得提一提电脑的基本概念:

  • CPU:中央处理器,处理速度最快。

  • memory:内存,临时性存储设备,处理速度次之,但数据不保存。

  • disk:硬盘,持久性存储设备,处理速度最慢,但数据永久保存。

什么叫IO流?

IO流,就是指读写文件的技术。

1.input

I就是指input:输入的意思,这是输入流。

意思是将硬盘里的数据输入到内存里,也就是读取文件。

2.output

O指output:输出的意思,这是输出流。

意思是将内存中的数据输出到硬盘上,也就是写入文件。

用一句话记忆就是:输入到内存(读取硬盘),从内存输出(写入硬盘)

举一个例子:

我们在记事本上写东西,写完后保存,保存的过程就是写入文件的过程。

  • 不保存:数据是在内存里面,退出后数据会消失;

  • 保存:数据会被写到硬盘上,退出后数据也会保存。

其中根据数据的类型IO流又分为:

字节流 :以字节为单位读写数据的流,能够操作所有文件

  • 字节输入流: InputStream

  • 字节输出流: OutputStream

字符流 :以字符为单位读写数据的流,用于操作文本文件

  • 字符输入流: Reader

  • 字符输出流: Writer

今天主要学习字节流:

二、OutputStream输出流

它是输出流最上层的父类,是一个抽象类,其中它有一个子类叫FileOutputStream。

1.构造方法(一)

先介绍其两个构造方法:

image

①构造方法一:路径存在

FileOutputStream(String name)。

根据文件路径输出文件,“a.txt”是一个相对路径,所以是输出在当前项目下。

②构造方法一:路径不存在

“aa/a.txt”因为其父路径不存在,所以会报错。

③构造方法二

FileOutputStream(File file)。

一般都是使用构造方法一,简单方法,只要输入路径就好了,但是会出现②中的这种情况。

而构造方法二就是解决这类问题的。

可以先在file中加一个判断,父路径不存在就先创建目录,再创建输出流。

2.常用方法

image

①write(int b)方法

这个方法表示是一个字节一个字节地写。

按照ASCII码表编码,97就对应a,98就对应b,99就对应c。

所以①的操作会在文件里写入abc。

②write(byte[] b)方法

这是先写一个byte数组,在写入文件。

也是按照ASCII码表编码。

③write(byte[] b, int off, int len)

off表示的是偏移量

len表示的是长度

也就是说写入文件的数组,是从b数组中off索引位开始,2个长度。

④close()方法

关流,节省资源。就可以将其理解成关闭水龙头。

所以在a.txt文件中会写入:abcabcbc。

3.构造方法(二)

image

我们新创建一个输出流,操作同一个文件,写入一个数组,会将文件中的内容覆盖掉。

a.txt文件里的内容从abcabcbc变成了刘小爱。

但若是我不是想覆盖而是续写在后面该怎么办?

构造方法三:

FileOutputStream(String name,boolean append)

append,附加的意思,默认值为false。

  • 如果append为true的话,会拼接到文件后面;

  • 如果append为false的话,就会覆盖。

image

①直接输入换行符

不同的操作系统有着不同的换行符

  1. Windows 系统识别的换行符:\r\n

  2. Unix 系统识别的换行符:\n

  3. MacOs/Linux系统识别的换行符:\r

②System方法输入换行符

System.lineSeparator():该方法会根据系统的不同而输入不同的换行符。

二、InputStream输入流

它是输入流最上层的父类,是一个抽象类,其中它有一个子类叫FileInputStream。

1.read方法基本用法

image

①创建输入流

如果文件不存在,输入流会直接报错。

②read()方法

输入流的读操作。

  • 返回值即为读取的字符,一次只能读取一个;

  • 如果读到了文件末尾,返回值为-1。

③使用while循环

一次读取所有内容,当返回值为-1时结束循环。

2.read方法(利用buffer读取文件)

这个稍稍有点难理解,我们一步一步分析:

image

①创建输入流

其中文件里的内容为abcdefgh.

创建buffer数组,长度为3,(buffer为缓存的意思)

②第一次读数据

将读到的数据放入buffer中,并返回读到的长度。

因为buffer的长度为3,所以每次读取读3个字节。

所以读到的是abc,长度为3。

③第二次读数据

读到的是def,长度为3。

buffer中def将abc覆盖掉了,所以打印def。

④第三次读数据

文件中只有最后两个字节了,

所以读到的是gh,长度为2

buffer中只覆盖了前两个字节,后面的第3个字节保持不变(gh将def覆盖得到ghf),所以打印ghf。

⑤第四次读数据

因为都读完了,根本就没有读文件,所以返回值为-1(注意不为0哦)

buffer没有改变,所以还是打印ghf。

以上就是利用buffer数组读取文件时的工作原理。

但这样太繁琐了,有没有简单的方法?

有的,使用while循环就好了。

3.read方法(利用buffer读取文件while循环)

image

①使用while循环

当length不为-1时,一直循环执行read操作;

当length为-1时,表示文件读到了最后,所以结束循环。

②使用字符串偏移

最后一次的字符串长度我们只需要读取到的数据,也就是ghf只需要gh即可。

总结

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容