java基础巩固,中级篇(IO)

本博客仅用于自己学习跟分享给大家参考而已

文件和文件夹都是用File代表 借助File来创建,操作的。

什么是流(Stream),流就是一系列的数据。

当不同的介质之间有数据交互的时候,JAVA就使用流来实现。
数据源可以是文件,还可以是数据库,网络甚至是其他的程序

比如读取文件的数据到程序中,站在程序的角度来看,就叫做输入流
输入流: InputStream 
输出流:OutputStream

InputStream是字节输入流,同时也是抽象类,只提供方法声明,不提供方法的具体实现。

OutputStream是字节输出流,同时也是抽象类,只提供方法声明,不提供方法的具体实现。

期间可以了解下ASCII码   下面给个表

字符十进制数字十六进制数字
!3321
"3422
#3523
$3624
%3725
&3826
'3927
(4028
)4129
*422A
+432B
,442C
-452D
.462E
/472F
04830
14931
25032
35133
45234
55335
65436
75537
85638
95739
:583A
;593B
<603C
=613D
>623E
@6440
A6541
B6642
C6743
D6844
E6945
F7046
G7147
H7248
I7349
J744A
K754B
L764C
M774D
N784E
O794F
P8050
Q8151
R8252
S8353
T8454
U8555
V8656
W8757
X8858
Y8959
Z905A
[915B
\925C
]935D
^945E
_955F
`9660
a9761
b9862
c9963
d10064
e10165
f10266
g10367
h10468
i10569
j1066A
k1076B
l1086C
m1096D
n1106E
o1116F
p11270
q11371
r11472
s11573
t11674
u11775
v11876
w11977
x12078
y12179
z1227A
{1237B
|1247C
}1257D
~1267E

 

FileInputStream 是InputStream子类,FileOutputStream 是OutputStream子类,一般用来进行文件操作。

所有的流,无论是输入流还是输出流,使用完毕之后,都应该关闭。 如果不关闭,会产生对资源占用的浪费。 当量比较大的时候,会影响到业务的正常开展。现在基本是把流定义在try里面

 //把流定义在try()里,try,catch或者finally结束的时候,会自动关闭

        try (FileInputStream fis = new FileInputStream(f)) {

            }

        catch (IOException e) {

            e.printStackTrace();

        }

字符流

Reader字符输入流 
Writer字符输出流 
专门用于字符的形式读取和写入数据

FileReader 是Reader子类,以FileReader 为例进行文件读取

FileWriter 是Writer的子类,以FileWriter 为例把字符串写入到文件

缓存流

缓存流必须建立在一个存在的流的基础上。

以介质是硬盘为例,字节流和字符流的弊端: 
在每一次读写的时候,都会访问硬盘。 如果读写的频率比较高的时候,其性能表现不佳。 

为了解决以上弊端,采用缓存流。 
缓存流在读取的时候,会一次性读较多的数据到缓存中,以后每一次的读取,都是在缓存中访问,直到缓存中的数据读取完毕,再到硬盘中读取。 

就好比吃饭,不用缓存就是每吃一口都到锅里去铲。用缓存就是先把饭盛到碗里,碗里的吃完了,再到锅里去铲 

缓存流在写入数据的时候,会先把数据写入到缓存区,直到缓存区达到一定的量,才把这些数据,一起写入到硬盘中去。按照这种操作模式,就不会像字节流,字符流那样每写一个字节都访问硬盘,从而减少了IO操作

缓存字符输入流 BufferedReader 可以一次读取一行数据

PrintWriter 缓存字符输出流, 可以一次写出一行数据

有的时候,需要立即把数据写入到硬盘,而不是等缓存满了才写出去。 这时候就需要用到flush

 

数据流

DataInputStream 数据输入流 
DataOutputStream 数据输出流

要用DataInputStream 读取一个文件,这个文件必须是由DataOutputStream 写出的,否则会出现EOFException,因为DataOutputStream 在写出的时候会做一些特殊标记,只有DataInputStream 才能成功的读取。

对象流

对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘 

一个对象以流的形式进行传输,叫做序列化。 该对象所对应的类,必须是实现Serializable接口

总结

1. 流分为字节流和字符流
2. 字节流下面常用的又有数据流和对象流
3. 字符流下面常用的又有缓存流

流关系图

 

除了上图所接触的流之外,还有很多其他流,如图所示InputStream下面有很多的子类。 这些子类他们大体上用法是差不多的,只是在一些特殊场合下用起来更方便,在工作中用到的时候再进行学习就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值