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

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

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

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

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

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

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

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

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

字符 十进制数字 十六进制数字
! 33 21
" 34 22
# 35 23
$ 36 24
% 37 25
& 38 26
' 39 27
( 40 28
) 41 29
* 42 2A
+ 43 2B
, 44 2C
- 45 2D
. 46 2E
/ 47 2F
0 48 30
1 49 31
2 50 32
3 51 33
4 52 34
5 53 35
6 54 36
7 55 37
8 56 38
9 57 39
: 58 3A
; 59 3B
< 60 3C
= 61 3D
> 62 3E
@ 64 40
A 65 41
B 66 42
C 67 43
D 68 44
E 69 45
F 70 46
G 71 47
H 72 48
I 73 49
J 74 4A
K 75 4B
L 76 4C
M 77 4D
N 78 4E
O 79 4F
P 80 50
Q 81 51
R 82 52
S 83 53
T 84 54
U 85 55
V 86 56
W 87 57
X 88 58
Y 89 59
Z 90 5A
[ 91 5B
\ 92 5C
] 93 5D
^ 94 5E
_ 95 5F
` 96 60
a 97 61
b 98 62
c 99 63
d 100 64
e 101 65
f 102 66
g 103 67
h 104 68
i 105 69
j 106 6A
k 107 6B
l 108 6C
m 109 6D
n 110 6E
o 111 6F
p 112 70
q 113 71
r 114 72
s 115 73
t 116 74
u 117 75
v 118 76
w 119 77
x 120 78
y 121 79
z 122 7A
{ 123 7B
| 124 7C
} 125 7D
~ 126 7E

 

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. 字符流下面常用的又有缓存流

java基础巩固,中级篇(IO)_第1张图片

 

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

你可能感兴趣的:(java基础巩固)