-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathREADME.html
463 lines (401 loc) · 13.9 KB
/
README.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
<!DOCTYPE html>
<html>
<head>
<title>README</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) */
/* Author: Nicolas Hery - http://nicolashery.com */
/* Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff */
/* Source: https://github.com/nicolahery/markdownpad-github */
/* RESET
=============================================================================*/
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
}
/* BODY
=============================================================================*/
body {
font-family: Helvetica, arial, freesans, clean, sans-serif;
font-size: 14px;
line-height: 1.6;
color: #333;
background-color: #fff;
padding: 20px;
max-width: 960px;
margin: 0 auto;
}
body>*:first-child {
margin-top: 0 !important;
}
body>*:last-child {
margin-bottom: 0 !important;
}
/* BLOCKS
=============================================================================*/
p, blockquote, ul, ol, dl, table, pre {
margin: 15px 0;
}
/* HEADERS
=============================================================================*/
h1, h2, h3, h4, h5, h6 {
margin: 20px 0 10px;
padding: 0;
font-weight: bold;
-webkit-font-smoothing: antialiased;
}
h1 tt, h1 code, h2 tt, h2 code, h3 tt, h3 code, h4 tt, h4 code, h5 tt, h5 code, h6 tt, h6 code {
font-size: inherit;
}
h1 {
font-size: 28px;
color: #000;
}
h2 {
font-size: 24px;
border-bottom: 1px solid #ccc;
color: #000;
}
h3 {
font-size: 18px;
}
h4 {
font-size: 16px;
}
h5 {
font-size: 14px;
}
h6 {
color: #777;
font-size: 14px;
}
body>h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h4:first-child, body>h5:first-child, body>h6:first-child {
margin-top: 0;
padding-top: 0;
}
a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
margin-top: 0;
padding-top: 0;
}
h1+p, h2+p, h3+p, h4+p, h5+p, h6+p {
margin-top: 10px;
}
/* LINKS
=============================================================================*/
a {
color: #4183C4;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
/* LISTS
=============================================================================*/
ul, ol {
padding-left: 30px;
}
ul li > :first-child,
ol li > :first-child,
ul li ul:first-of-type,
ol li ol:first-of-type,
ul li ol:first-of-type,
ol li ul:first-of-type {
margin-top: 0px;
}
ul ul, ul ol, ol ol, ol ul {
margin-bottom: 0;
}
dl {
padding: 0;
}
dl dt {
font-size: 14px;
font-weight: bold;
font-style: italic;
padding: 0;
margin: 15px 0 5px;
}
dl dt:first-child {
padding: 0;
}
dl dt>:first-child {
margin-top: 0px;
}
dl dt>:last-child {
margin-bottom: 0px;
}
dl dd {
margin: 0 0 15px;
padding: 0 15px;
}
dl dd>:first-child {
margin-top: 0px;
}
dl dd>:last-child {
margin-bottom: 0px;
}
/* CODE
=============================================================================*/
pre, code, tt {
font-size: 12px;
font-family: Consolas, "Liberation Mono", Courier, monospace;
}
code, tt {
margin: 0 0px;
padding: 0px 0px;
white-space: nowrap;
border: 1px solid #eaeaea;
background-color: #f8f8f8;
border-radius: 3px;
}
pre>code {
margin: 0;
padding: 0;
white-space: pre;
border: none;
background: transparent;
}
pre {
background-color: #f8f8f8;
border: 1px solid #ccc;
font-size: 13px;
line-height: 19px;
overflow: auto;
padding: 6px 10px;
border-radius: 3px;
}
pre code, pre tt {
background-color: transparent;
border: none;
}
kbd {
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;
background-color: #DDDDDD;
background-image: linear-gradient(#F1F1F1, #DDDDDD);
background-repeat: repeat-x;
border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD;
border-image: none;
border-radius: 2px 2px 2px 2px;
border-style: solid;
border-width: 1px;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
line-height: 10px;
padding: 1px 4px;
}
/* QUOTES
=============================================================================*/
blockquote {
border-left: 4px solid #DDD;
padding: 0 15px;
color: #777;
}
blockquote>:first-child {
margin-top: 0px;
}
blockquote>:last-child {
margin-bottom: 0px;
}
/* HORIZONTAL RULES
=============================================================================*/
hr {
clear: both;
margin: 15px 0;
height: 0px;
overflow: hidden;
border: none;
background: transparent;
border-bottom: 4px solid #ddd;
padding: 0;
}
/* TABLES
=============================================================================*/
table th {
font-weight: bold;
}
table th, table td {
border: 1px solid #ccc;
padding: 6px 13px;
}
table tr {
border-top: 1px solid #ccc;
background-color: #fff;
}
table tr:nth-child(2n) {
background-color: #f8f8f8;
}
/* IMAGES
=============================================================================*/
img {
max-width: 100%
}
</style>
</head>
<body>
<h2>IO流是干什么的?</h2>
<p>IO流指的是输入输出流,用来处理设备上的数据。这里的设备指硬盘,内存,键盘录入,网络传输等。</p>
<h2>IO流的分类?</h2>
<p>按处理数据类型来分:字节流和字符流<br />
按流的方向来分:输入流和输入流。</p>
<p>流的输入和输出是针对与当前应用来说的,如果读取其他应用或文件的数据到当前应用,则使用输入流读取;如果从当前应用<strong>输出数据</strong>,并写入到其他应用和文件,则使用输出流执行写入。</p>
<p>总之,当前应用需要读数据的时候,使用输入流;当前应用需要写数据的时候,使用输出流。简单来讲,<strong>读入写出</strong>,要读的话就用输入流,要写的话,就用输出流。</p>
<p><img src="io.bmp" alt="输入流与输出流" /></p>
<h2>什么时候使用字节流?什么时候使用字符流?</h2>
<p>首先需要知道的是,任何数据存在硬盘上时,都是以二进制的形式存储的。而通过使用字节流,可以读取任意文件。字节流一次读取一个字节,而字符流使用了字节流读到一个或者多个字节时,去查找指定的编码表,返回对应的编码。所以字符流只能处理纯文本字符数据,而字节流可以处理更多类型的数据,比如图片,视频,音频文件等。因此,只要是纯文本数据处理,优先考虑使用字符流。其他情况就使用字节流。</p>
<h2>IO流类的关系</h2>
<p><img src="IO.jpg" alt="IO流基础图" /></p>
<h2>IO 包中的常见对象</h2>
<p><strong>1)字节流:</strong> </p>
<ul>
<li>字节输入流 </li>
</ul>
<blockquote>
<p><strong>FileInputStream(String name)</strong><br />
Creates a FileInputStream by opening a connection to an actual file, the file named by the path name name in the file system.<br />
<strong>FileInputStream(File file)</strong><br />
Creates a FileInputStream by opening a connection to an actual file, the file named by the File object file in the file system.<br />
<strong>BufferedInputStream(InputStream in)</strong><br />
Creates a BufferedInputStream and saves its argument, the input stream in, for later use.<br />
<strong>BufferedInputStream(InputStream in, int size)</strong><br />
Creates a BufferedInputStream with the specified buffer size, and saves its argument, the input stream in, for later use.
</p>
</blockquote>
<ul>
<li>字节输出流 </li>
</ul>
<blockquote>
<p><strong>FileOutputStream(File file)</strong><br />
Creates a file output stream to write to the file represented by the specified File object.<br />
<strong>FileOutputStream(String name)</strong><br />
Creates a file output stream to write to the file with the specified name.<br />
<strong>BufferedOutputStream(OutputStream out)</strong><br />
Creates a new buffered output stream to write data to the specified underlying output stream.<br />
<strong>BufferedOutputStream(OutputStream out, int size)</strong><br />
Creates a new buffered output stream to write data to the specified underlying output stream with the specified buffer size.
</p>
</blockquote>
<p><strong>2)字符流:</strong> </p>
<ul>
<li>字符输入流 </li>
</ul>
<blockquote>
<p><strong>FileReader(File file)</strong><br />
Creates a new FileReader, given the File to read from.<br />
<strong>FileReader(String fileName)</strong><br />
Creates a new FileReader, given the name of the file to read from.<br />
<strong>BufferedReader(Reader in)</strong><br />
Creates a buffering character-input stream that uses a default-sized input buffer.<br />
<strong>BufferedReader(Reader in, int sz)</strong><br />
Creates a buffering character-input stream that uses an input buffer of the specified size.
</p>
</blockquote>
<ul>
<li>字符输出流 </li>
</ul>
<blockquote>
<p><strong>BufferedReader(Reader in)</strong><br />
Creates a buffering character-input stream that uses a default-sized input buffer.<br />
<strong>BufferedReader(Reader in, int sz)</strong><br />
Creates a buffering character-input stream that uses an input buffer of the specified size.<br />
<strong>BufferedWriter(Writer out)</strong><br />
Creates a buffered character-output stream that uses a default-sized output buffer.<br />
<strong>BufferedWriter(Writer out, int sz)</strong><br />
Creates a new buffered character-output stream that uses an output buffer of the given size.
</p>
</blockquote>
<p><strong>3)转换流:</strong> </p>
<blockquote>
<p><strong>InputStreamReader(InputStream in)</strong><br />
Creates an InputStreamReader that uses the default charset.<br />
<strong>InputStreamReader(InputStream in, String charsetName)</strong><br />
Creates an InputStreamReader that uses the named charset.
<strong>OutputStreamWriter(OutputStream out)</strong><br />
Creates an OutputStreamWriter that uses the default character encoding.<br />
<strong>OutputStreamWriter(OutputStream out, String charsetName)</strong><br />
Creates an OutputStreamWriter that uses the named charset.
</p>
</blockquote>
<p><strong>4)文件对象:</strong> </p>
<blockquote>
<p><strong>File(File parent, String child)</strong><br />
Creates a new File instance from a parent abstract pathname and a child pathname string.<br />
<strong>File(String pathname)</strong><br />
Creates a new File instance by converting the given pathname string into an abstract pathname.<br />
<strong>File(String parent, String child)</strong><br />
Creates a new File instance from a parent pathname string and a child pathname string.
</p>
</blockquote>
<p><strong>5)打印流:</strong> </p>
<blockquote>
<p><strong>PrintWriter(File file)</strong><br />
Creates a new PrintWriter, without automatic line flushing, with the specified file.<br />
<strong>PrintWriter(OutputStream out)</strong><br />
Creates a new PrintWriter, without automatic line flushing, from an existing OutputStream.<br />
<strong>PrintStream(OutputStream out)</strong><br />
Creates a new print stream.<br />
<strong>PrintStream(File file)</strong><br />
Creates a new print stream, without automatic line flushing, with the specified file.
</p>
</blockquote>
<h2>字节流</h2>
<h2>字符流</h2>
<h2>转换流</h2>
<p>InputStreamReader:字节到字符的桥梁(将读取的字节流转换为字符流);<br />
OutputStreamWriter:字符到字节的桥梁(将输入的字符流抓换为字节流);</p>
<p><strong>构造函数</strong></p>
<blockquote>
<p><strong>InputStreamReader(InputStream in)</strong><br />
使用默认的编码表GBK创建一个InputStreamReader</p>
<p><strong>InputStreamReader(InputStream in, String charsetName)</strong><br />
指定编码表创建一个InputStreamReader</p>
<p><strong>OutputStreamWriter(OutputStream out)</strong><br />
使用默认的编码表GBK创建一个OutputStreamWriter</p>
<p><strong>OutputStreamWriter(OutputStream out, String charsetName)</strong><br />
指定编码表创建一个OutputStreamWriter</p>
</blockquote>
<pre><code>public class OutputStreamWriterDemo {
public static void main(String[] args){
File file = new File("D:\\Test.java");
try {
// 写字符换转成字节流(使用GBK编码进行写)
FileOutputStream outputStream = new FileOutputStream(file);
OutputStreamWriter writer = new OutputStreamWriter(outputStream,"GBk");
writer.write("我是中国人");
writer.close();
// 读取字节转换成字符(使用GBK编码进行读)
FileInputStream inputStream = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(inputStream,"GBk");
StringBuffer buffer = new StringBuffer();
char[] cbuf = new char[64];
int count = 0;
while((count = reader.read(cbuf))!=-1){
buffer.append(cbuf,0,count);
System.out.println(buffer);
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
</code></pre>
<h2>参考:</h2>
<p><a href="http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/">深入分析 Java 中的中文编码问题</a><br />
<a href="http://www.cnblogs.com/thinksasa/archive/2012/10/26/2741091.html">IO流</a></p>
</body>
</html>
<!-- This document was created with MarkdownPad, the Markdown editor for Windows (http://markdownpad.com) -->