Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java程序设计 第18章 二进制I/O.

Similar presentations


Presentation on theme: "Java程序设计 第18章 二进制I/O."— Presentation transcript:

1 Java程序设计 第18章 二进制I/O

2 学习目标 理解输入和输出流 理解字节流和字符流 掌握使用文件流读写文件 掌握缓冲流 了解数据流 掌握对象流和对象序列化
了解RandomAccessFile

3 输入输出 java.io包以流(stream)定义输入/输出。 java.io包中的流主要分为
字节流:以8位字节形式读写(InputStream/OutputStream) 字符流:以16位字符形式读写(Reader/Writer)。 信息源 程序 (写) 目的地 程序 (读) InputStream OutputStream 或Reader 或Writer open a stream while more information{ read information } close the stream write information

4 字节流 InputStream OutputStream FileInputStream ByteArrayInputStream
DataInputStream FilterInputStream BufferedInputStream InputStream PipedInputStream PushbackInputStream ObjectInputStream SequenceInputStream FileOutputStream ByteArrayOutputStream DataOutputStream OutputStream FilterOutputStream BufferedOutputStream PipedOutputStream PrintStream ObjectOutputStream

5 InputStream public int read() public int read(byte b[])
public int read(byte b[], int offset, int length) public int available() public long skip(long n) public boolean markSupported() public void mark(int readlimit) public void reset() public void close() Example:CountBytes.java

6 OutputStream public void write(int b) public void write(byte b[])
public void write(byte b[], int offset, int length) public void flush() throws IOException public void close() throws IOException Example:CopyBytes.java

7 字符流 CharArrayReader StringReader InputStreamReader FileReader Reader
FilterReader PushbackReader PipedReader BufferedReader LineNumberReader CharArrayWriter StringWriter OutputStreamWriter FileWriter Writer PrintWriter FilterWriter PipedWriter BufferedWriter

8 Reader public int read() public int read(char buf[])
public int read(char buf[], int offset, int length) public boolean ready() public long skip(long n) public boolean markSupported() public void mark(int readAheadLimit) public void reset() public abstract void close() Example:CountSpace.java

9 Writer public void write(int c) public void write(char buf[])
public void write(char buf[], int offset, int length) public void write(String str) public void write(String str, int offset, int length) public Writer append(CharSequence csq) public Writer append(CharSequence csq, int start, int end) public Writer append(char c) public abstract void flush() public abstract void close() Example:Copy.java

10 流类汇总 字符 字节 读 写 CharArrayReader CharArrayWriter ByteArrayInputStream
数组 CharArrayReader CharArrayWriter ByteArrayInputStream ByteArrayOutputSteam 字符串 StringReader StringWriter StringBufferInputStream - 管道 PipedReader PipedWriter PipedInputStream PipedOutputStream 文件 FileReader FileWriter FileInputStream FileOutputStream 缓冲 BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream 过滤 FilterReader FilterWriter FilterInputStream FilterOutputStream 串行化 ObjectInputStream ObjectOutputStream 数据 DataInputStream DataOutputStream 计数 LineNumberReader LineNumberInputStream 预览 PushbackReader PushbackInputStream 打印 PrintWriter PrintStream 转换 InputStreamReader OutputStreamWriter 联结 SequenceInputStream

11 文件流 文件流用于读写磁盘文件。 构造函数 FileInputStream FileOutputStream FileReader
FileWriter 构造函数 public stream(String fileName) public stream(File file) 当读文件不存在时,会产生java.io.FileNotFoundException异常 当写文件不存在时,会创建一个新文件。如果文件存在,可以指定是否追加 Example:TestFileReader.java, TestFileWriter.java

12 InputStreamReader和OutputStreamWriter
public InputStreamReader(InputStream in) public InputStreamReader(InputStream in, Charset c) 从底层InputStream读取的字节,按指定的编码格式转换成字符。 OutputStreamWriter public OutputStreamWriter(OutputStream out) public OutputStreamWriter(OutputStream out, Charset c) 写入OutputStreamWriter的字符使用指定的编码格式转换成字节,再写入底层的OutputStream。

13 缓冲流 缓冲流对底层数据进行缓冲,减少文件访问次数。 构造函数 方法 BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in, int size) BufferedOutputStream(OutputStream out) BufferedOutputStream(OutputStream out , int size) BufferedReader(Reader in) BufferedReader(Reader in , int size) BufferedWriter(Writer out) BufferedWriter(Writer out , int size) 方法 BufferedReader的readLine方法,用于读取一行文本,如果到达文件结尾,readLine返回null。 BufferedWriter的newLine方法用于写入一个换行符。

14 例 在文本区显示文件 编写程序,在TextArea中显示文件的内容。 Example:FileViewer.java

15 JFileChooser 文件选择对话框用于从文件系统中选择文件名称。 Example:TextEditor.java

16 数据字节流 以不依赖于机器的方式对基本数据类型和字符串进行读写。 Example:TestDataStream.java

17 对象串行化 串行化(serialization)是将一个对象转化为字节流的过程。
只有对象的类实现了Serializable接口,才能被串行化。 public class MyClass implements Serializable {} ObjectOutputStream自动写出: 对象的类。 类的签名。 所有非transient和非static成员的值,包括引用其它对象的成员。 反串行化(deserialization )是从字节流重建对象的过程。

18 对象流 Write Read FileOutputStream out = new FileOutputStream("theTime");
ObjectOutputStream s = new ObjectOutputStream(out); s.writeObject("Today"); s.writeObject(new Date()); Read FileInputStream in = new FileInputStream("theTime"); ObjectInputStream s = new ObjectInputStream(in); String today = (String)s.readObject(); Date date = (Date)s.readObject(); Example:TestObjectOutputStream.java, TestObjectInputStream.java

19 对象版本 串行版本UID是一个long值,当对象串行化时写入到流中。缺省情况下,这个标识符是类名、父类型和成员的一个散列值。
当从ObjectInputStream读取对象时,先读取串行版本UID,再加载类。如果加载类的UID与流中的UID不匹配,则抛出InvalidClassException。 可以显式地声明一个串行版本UID private static final long serialVersionUID = L;

20 随机访问文件 随机访问文件允许对文件的内容进行非顺序的读写。
RandomAccessFile实现了DataInput和DataOutput接口。 RandomAccessFile(File file, String mode) RandomAccessFile(String name, String mode) void seek(long pos) long getFilePointer() void setLength(long newLength) Example:TestRandomAccessFile.java


Download ppt "Java程序设计 第18章 二进制I/O."

Similar presentations


Ads by Google