Suche senden
Hochladen
13, io
•
0 gefällt mir
•
373 views
ted-xu
Folgen
About java IO framework
Weniger lesen
Mehr lesen
Diashow-Anzeige
Melden
Teilen
Diashow-Anzeige
Melden
Teilen
1 von 22
Empfohlen
[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3
ArBing Xie
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
Io 2
Io 2
Medivh2011
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
Empfohlen
[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3
ArBing Xie
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
Io 2
Io 2
Medivh2011
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
[중소기업청]뚜따 회사소개서
[중소기업청]뚜따 회사소개서
startupkorea
5, initialization & cleanup
5, initialization & cleanup
ted-xu
FDA
FDA
Iris He
プレゼンはなぜ難しいのか〜学ぶための視点を整理しよう〜
プレゼンはなぜ難しいのか〜学ぶための視点を整理しよう〜
Koki Kusano
1, linux intro
1, linux intro
ted-xu
How to install Firmware on Eurosat P6 HD Set Top Box
How to install Firmware on Eurosat P6 HD Set Top Box
Eurosat
F-commerce to E-commerce conversion
F-commerce to E-commerce conversion
Moshiur Monty
CIO Event - Info vista - Application Transformation
CIO Event - Info vista - Application Transformation
Global Business Intel
10 Factors of Ranking a YouTube Video
10 Factors of Ranking a YouTube Video
Moshiur Monty
Vencomatic company introduction
Vencomatic company introduction
nielsgeraerts
12, string
12, string
ted-xu
Io 3
Io 3
Medivh2011
Java 網路程式
Java 網路程式
PingLun Liao
网站字体渲染 麦时
网站字体渲染 麦时
time zhong
輸入輸出
輸入輸出
Justin Lin
Java_05:檔案輸出輸入機制
Java_05:檔案輸出輸入機制
Brad Chao
SCJP ch16
SCJP ch16
r82093403
Java program in_action
Java program in_action
mysqlops
Java program in_action_20110727-撒迦
Java program in_action_20110727-撒迦
chenjianxing
Jvm分享20101228
Jvm分享20101228
lunfu zhong
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]
yiditushe
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
javatwo2011
Weitere ähnliche Inhalte
Andere mochten auch
[중소기업청]뚜따 회사소개서
[중소기업청]뚜따 회사소개서
startupkorea
5, initialization & cleanup
5, initialization & cleanup
ted-xu
FDA
FDA
Iris He
プレゼンはなぜ難しいのか〜学ぶための視点を整理しよう〜
プレゼンはなぜ難しいのか〜学ぶための視点を整理しよう〜
Koki Kusano
1, linux intro
1, linux intro
ted-xu
How to install Firmware on Eurosat P6 HD Set Top Box
How to install Firmware on Eurosat P6 HD Set Top Box
Eurosat
F-commerce to E-commerce conversion
F-commerce to E-commerce conversion
Moshiur Monty
CIO Event - Info vista - Application Transformation
CIO Event - Info vista - Application Transformation
Global Business Intel
10 Factors of Ranking a YouTube Video
10 Factors of Ranking a YouTube Video
Moshiur Monty
Vencomatic company introduction
Vencomatic company introduction
nielsgeraerts
Andere mochten auch
(10)
[중소기업청]뚜따 회사소개서
[중소기업청]뚜따 회사소개서
5, initialization & cleanup
5, initialization & cleanup
FDA
FDA
プレゼンはなぜ難しいのか〜学ぶための視点を整理しよう〜
プレゼンはなぜ難しいのか〜学ぶための視点を整理しよう〜
1, linux intro
1, linux intro
How to install Firmware on Eurosat P6 HD Set Top Box
How to install Firmware on Eurosat P6 HD Set Top Box
F-commerce to E-commerce conversion
F-commerce to E-commerce conversion
CIO Event - Info vista - Application Transformation
CIO Event - Info vista - Application Transformation
10 Factors of Ranking a YouTube Video
10 Factors of Ranking a YouTube Video
Vencomatic company introduction
Vencomatic company introduction
Ähnlich wie 13, io
12, string
12, string
ted-xu
Io 3
Io 3
Medivh2011
Java 網路程式
Java 網路程式
PingLun Liao
网站字体渲染 麦时
网站字体渲染 麦时
time zhong
輸入輸出
輸入輸出
Justin Lin
Java_05:檔案輸出輸入機制
Java_05:檔案輸出輸入機制
Brad Chao
SCJP ch16
SCJP ch16
r82093403
Java program in_action
Java program in_action
mysqlops
Java program in_action_20110727-撒迦
Java program in_action_20110727-撒迦
chenjianxing
Jvm分享20101228
Jvm分享20101228
lunfu zhong
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]
yiditushe
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
javatwo2011
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
Angel Boy
Btrace intro(撒迦)
Btrace intro(撒迦)
ykdsg
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Justin Lin
Java 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - Lucene
建興 王
Spark tutorial
Spark tutorial
Lin JiaMing
Google protocol buffers简析
Google protocol buffers简析
wavefly
Fast Esp搜索系统
Fast Esp搜索系统
xiaochawan
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
czzz1
Ähnlich wie 13, io
(20)
12, string
12, string
Io 3
Io 3
Java 網路程式
Java 網路程式
网站字体渲染 麦时
网站字体渲染 麦时
輸入輸出
輸入輸出
Java_05:檔案輸出輸入機制
Java_05:檔案輸出輸入機制
SCJP ch16
SCJP ch16
Java program in_action
Java program in_action
Java program in_action_20110727-撒迦
Java program in_action_20110727-撒迦
Jvm分享20101228
Jvm分享20101228
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
Btrace intro(撒迦)
Btrace intro(撒迦)
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
Java 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - Lucene
Spark tutorial
Spark tutorial
Google protocol buffers简析
Google protocol buffers简析
Fast Esp搜索系统
Fast Esp搜索系统
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
Mehr von ted-xu
11, OCP - awr & alert system
11, OCP - awr & alert system
ted-xu
10, OCP - flashback
10, OCP - flashback
ted-xu
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman
ted-xu
8, OCP - backup with rman
8, OCP - backup with rman
ted-xu
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
ted-xu
6, OCP - oracle security
6, OCP - oracle security
ted-xu
5, OCP - oracle storage
5, OCP - oracle storage
ted-xu
4, OCP - oracle networking
4, OCP - oracle networking
ted-xu
3, OCP - instance management
3, OCP - instance management
ted-xu
2, OCP - installing and creating a database
2, OCP - installing and creating a database
ted-xu
1, OCP - architecture intro
1, OCP - architecture intro
ted-xu
12, OCP - performance tuning
12, OCP - performance tuning
ted-xu
7, business event system
7, business event system
ted-xu
6, workflow miscellaneous
6, workflow miscellaneous
ted-xu
5, workflow function activity
5, workflow function activity
ted-xu
4, workflow tables & api
4, workflow tables & api
ted-xu
3, workflow in ebs
3, workflow in ebs
ted-xu
2, a simple workflow
2, a simple workflow
ted-xu
1, workflow intro
1, workflow intro
ted-xu
8, bes tables & api
8, bes tables & api
ted-xu
Mehr von ted-xu
(20)
11, OCP - awr & alert system
11, OCP - awr & alert system
10, OCP - flashback
10, OCP - flashback
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman
8, OCP - backup with rman
8, OCP - backup with rman
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
6, OCP - oracle security
6, OCP - oracle security
5, OCP - oracle storage
5, OCP - oracle storage
4, OCP - oracle networking
4, OCP - oracle networking
3, OCP - instance management
3, OCP - instance management
2, OCP - installing and creating a database
2, OCP - installing and creating a database
1, OCP - architecture intro
1, OCP - architecture intro
12, OCP - performance tuning
12, OCP - performance tuning
7, business event system
7, business event system
6, workflow miscellaneous
6, workflow miscellaneous
5, workflow function activity
5, workflow function activity
4, workflow tables & api
4, workflow tables & api
3, workflow in ebs
3, workflow in ebs
2, a simple workflow
2, a simple workflow
1, workflow intro
1, workflow intro
8, bes tables & api
8, bes tables & api
13, io
1.
IO
2.
Agenda
3.
概述 • 输入输出流(IO)的设计对于任何编程语言都
是一个挑战, 因为IO涉及到了很多方面, 比如 不同的IO类型文件/网络/控制台等, 还需要 处理各种字符编码问题; 针对各种情形, java 都提供了相应的解决方案; • IO大体上可以分为两种, 面向字节的和面向 字符的, 前者操作的对象是编码后的一个一 个的字节, 而后者操作的则是解码之后的字 符; 关于字符串的编码解码会有相应的介绍.
4.
输入与输出 • 输入是指将内容从文件/网络等读取到内存,
java中的输入字节流继承自java.io.InputStream, 输入字符流则继承自java.io.Reader; • 输出则是将内容从内存输出到文件或者通 过网络流进行传输, 输出字节流均继承自 java.io.OutputStream, 输出字符流均继承自 java.io.Writer.
5.
字符编码 • 字符在保存到文件或者网络传输时, 都需要先转换成比
特位(0/1), 由字符转换为字节的过程就称之为编码; 字符 编码的种类有很多, 比如最基础的是ASCII编码, 是所有其 他字符编码的基础; 对于中文字符集, 常用的编码是: UTF-8, GBK, GB2312等, 推荐使用的编码是UTF-8编码; • 解码, 与编码相反是从字节得到相应字符的过程, 比如从 文件中读取字符; 解码需要选择与编码相同的方式进行, 比如采用的UTF-8进行编码, 那么相应的进行解码时也需 要使用UTF-8; • Java可以通过String类的如下方法得到编码后的字节数组, 如果指定的字符编码参数不存在或者不被支持那么会抛 出相应的异常: byte[] getBytes(String encoding) throws UnsupportedEncodingException • 示例: demo/Demo1.java
6.
ASCII编码表 • ASCII 是
American standard code for information interchange(美 国信息交换标准编码)的缩写, 它定义了基本 英文字符, 数字字符以及其它常用符号, 控制 字符等的编码, 比如数字字符0对应的编码 是48, 小写字母a对应的是97, 空格字符对应 的是32; ASCII编码是一个通用的编码标准, 大多数其它的字符编码都遵循此标准, 详细 的编码可以在这里找到.; • 示例: demo/Demo2.java
7.
字节流 vs 字符流 •
在处理IO操作的时候需要关注的一个问题就 是, 当前流操作时针对字节(byte based)还是 字符(char based)的. 字节流不需要考虑编码 的问题, 而字符流则需要考虑合适的编码. • Java针对两种处理方式分别提供了相应的实 现, 输入字节流继承自java.io.InputStream • 比如FileInputStream是从文件中读取字节的, BufferedReader/BufferedWriter是从文件中读 取字符的.
8.
缓冲 • 由于读取磁盘是一件代价高昂的操作, 因此出
于性能方面的考虑通常需要对输入输出流进行 缓冲; 输入流缓冲是指先将内容读取到一个内 存缓冲区(memory buffer area), 只有当该区域 为空的时候再从磁盘中读取; 输出流缓冲则是 指将需要写入磁盘的内容先写入一个内存缓冲 区, 只有当该缓冲区被写满/或者手动清空(flush) 时, 才进行实际的磁盘写操作; • java IO对缓冲提供了相应的支持; 比如字节流 缓冲BufferedInputStream, 对于字符流的缓冲 BufferedReader.
9.
Java IO类 • 这里列出常用的java
IO类 InputStream Reader FileInputStre BufferedInpu InputStreamR BufferedRead am tStream eader er Writer FileReader OutputStrea BufferedWrit OutputStrea mWriter er m BufferedWrit er FileWriter FileOutputStr BufferedOutp eam utStream
10.
流对象的创建
装饰器(Decorator)模式 • 在java中创建一个IO流对象时通常会看到如下 的写法: BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(somefile)), “UTF-8”); • 这里为了创建一个带缓冲的字符输出流, 需要 创建多个流对象, 这是java IO让人迷惑的一个 地方. 分析一下这条语句, 分以下3步: 1, 创建一个文件字节输出流; 2, 创建一个字符输出流, 使用UTF8编码; 3, 创建一个缓冲字符输出流. 这里每一步都在前一步的基础上增加了新的功能, 这是java中的装饰器(Decorator)模式, 参考.
11.
java.io.File •
File表示磁盘文件或者目录, 可以通过以下构造器创建File对象: File(File parent, String child) File(String parent, String child) 指定父目录和文件名称 File(String pathname) 指定文件/目录的路径 Note: 关于File类需要注意的一点是, 它既可以表示磁盘上的文件也可以表示目录, java没有提 供专门的Directory类 • File类常用的方法: boolean exists 判断文件或者目录是否存在; String getAbsolutePath 返回绝对路径 String getName 返回文件/目录的名称 File getParentFile 返回父目录File对象 String getParent 返回父目录的路径 String[] list 返回当前目录下面的所有文件/目录 String[] list(FilenameFilter filter) 返回当前目录下面的所有符合过滤 条件的文件/目录 File[] listFiles/listFiles(FilenameFilter) 与list类似, 这里返回的是File数组 long length 返回文件的字节数 boolean isFile()/isDirectory() 判断是文件还是目录 boolean delete 删除当前文件/目录 boolean deleteOnExit 在JVM退出时删除文件/目录 • 示例: demo/Demo3.java
12.
FilenameFilter • 在列举目录下的文件时, 往往需要提供一个过滤器
(filter), 只有符合该过滤条件的才包含在结果中; File 类的list/listFiles方法提供了相应的版本: String[] list(FilenameFilter filter) File[] listFiles(FilenameFilter filter) • FilenameFilter接口规范: public interface FilenameFilter { boolean accept(File dir, String name); } 在列举目录下面的文件时, 会对每一个文件调用一次 accept方法如果返回true则会将该文件包含在结果中; • 示例: demo/Demo4.java
13.
字节输入流的类型 • 输入流大体有以下几种类型: 1,
字节数组/字符串; 2, 文件; 3, 网络流; 4, 管道流 • java通过以下输入流类型提供了支持: 类型 Java类 说明 字节数组输入流 ByteArrayInputStream 使用字节数组(byte[])作为输入流, 从该字节数组中读取数据 字符串输入流 StringBufferInputStrea 使用字符串作为输入流 m 不推荐使用 文件输入流 FileInputStream 使用文件作为输入流 管道输入流 PipedInputStream N/A
14.
字节输出流的类型 • 与输入流对应的, 输出流有:
类型 Java类 说明 字节数组输出流 ByteArrayOutputStream 将将内容写到一个字节数组 (byte[])中 文件输出流 FileOutputStream 使用文件作为输出流 管道输出流 PipedOutputStream N/A
15.
FilterInputStream
& FilterOutputStream • 前面讲到过java IO通过装饰器模式对已有的 流对象添加新的功能, 比如缓冲/字符处理等; FilterInputStream/FilterOutputStream基类分 别代表一个字节输入/输出流装饰器, java提 供了以下的类型的实现: 功能类型 Input Output 缓冲 BufferedInputStream BufferedOutputStream 数据读写 DataInputStream DataOutputStream 按行数读取 LineNumberInputStream N/A 打印输出 N/A PrintStream
16.
Reader
&Writer • 自JDK1.1开始java引入了面向字符(char based)的流处理API, 其中字符输入流继承自java.io.Reader, 输出流则继承 java.io.Writer; • 字节流和字符流API对应关系: 字节流 字符流 InputStream Reader 使用InputStreamReader将字节流转换为Reader OutputStream Writer 使用OutputStreamReader将字节流转换为Writer FileInputStream FileReader FileOutputStream FileWriter StringBufferInptuStream StringReader N/A StringWriter ByteArrayInputStream CharArrayReader ByteArrayOutStream CharArrayWriter
17.
FilterReader
&FilterWriter • 与字节流装饰器基类(FilterInputStream/ FilterOuputStream)对应的字符流API也提供了 相应的基类: FilterReader/FilterWriter, 相应的 具体实现如下: 功能类型 Reader Writer 缓冲 BufferedReader BufferedWriter 按行数读取 LineNumberReader N/A 打印输出 N/A PrintWriter
18.
InputStreamReader
&OutputStreamWriter • 经常需要关注的一个问题是, 如果通过一个 字节流创建相应的字符流, 比如将一个 InputStream转换为一个Reader从而进行字 符操作, java针对输入/输出分别提供了相应 的适配器(adapter)实现这种转换, 其中 InputStreamReader实现InputStream到Reader 的转换, OutputStreamWriter实现OutputStream 到Writer的转换; • 示例: demo/Demo5.java
19.
典型用法 • 通常使用BufferedReader实现对文件的逐行
读取; 使用BufferedWriter/PrintWriter实现对 文件的逐行写入, PrintWriter与BufferedWriter 的主要差别在于: PrintWriter没有缓冲, 可以 通过println方法写入一行并且换行; 因此 PrintWriter使用方便但性能较差; • 不在使用某个流对象时, 需要调用close方法 以实现资源的释放;
20.
标准I/O • java通过如下方式实现了对标准IO的支持,
其中: System.in 标准输入, InputStream对象; System.out 标准输出, PrintStream对象; System.err 标准错误输出, PrintStream对象. • 可以使用BufferedReader对System.in进行包 装, 一次读取一行输入. BufferedReader reader = new BufferedReader( new InputStreamReader(System.in)); • 示例: demo/Demo6.java
21.
标准I/O
重定向 • 可以对标准IO进行重定向, 标准输入的重定向 指的是用其他的输入流比如文件输入流作为标 准输入, 而标准输出/错误的重定向指的是将输 出/错误定向到其他的目标比如文件/网络等, Java可以通过调用如下接口实现重定向操作: System.setIn(InputStream) 重定向输入流 System.setOut(PrintStream) 重定向输出流 System.setErr(PrintStream) 重定向错误流 • 示例: demo/Demo7.java
22.
END