流和文件( 1)
辽宁经济职业技术学院信息系
硕士、副教授 陈英
理解流
数据 数据程序
输入流
InputStream
输出流
OutputStream
键盘
显示 器
打印机
可以从中读
取数据的对
象称为输入

能够向其中写入
一系列数据的对
象称为输出流
什么是流?
输入设备 —— 数据来源
输出设备 —— 数据目标流是 的一种抽象表示。
? 输出流 (Output Stream)—— 向一个流写入数据。
? 输出流可以传输到任何允许向它传送一系列字
节信息的设备,如硬盘上的文件、远程系统上
的文件或者打印机,输出流还可以输出到显示
器。
? 输入流 (Input Stream)—— 数据从磁盘文件、键
盘或者远程计算机中读取。
? 缓冲流 (Buffered Stream)—— 使内存与外部设
备之间传送的实际数据以足够大的数据块形式
传送,以提高输入 /输出的效率。
流的基本概念
能够读取一个字节序列的对象称作一个输入
流。它由一个抽象类 InputStream表示。
能够写一个字节序列的对象称作一个输出流。
它由一个抽象类 OutputStream表示。
因为面向字节的流不方便用来存储为
Unicoide的信息,所以引入抽象类 Reader和
Writer。
Java中每一种流的基本功能依赖于基本类
InputStream和 OutputStream。它们是抽象
类,不能直接使用。
Java输入 /输出类层次结构
java.long.Object
java.io.OutputStream
java.io.Reader
java.io.Writer
java.io.InputStream它们都是抽象类,能够读写
所有的 java类型。
java.io,InputStreamabstract int read()
它是一个抽象方法:读取数据的一个字节并返回
该字节。如果遇到流的末尾则返回 -1。
int read(byte[] b)
把数据读取到一个字节数组中,并返回实际读取
的字节数目。该方法最多读取 b.length个字节。
int read(byte,int off,int len);
把数据读入到一个字节数组中并返回实际读取的
字节数目。其中参数 b表示存储数据的数组; off
是第一个字节在 b中的位置; len表示读取的最在
大字节数
java.io,InputStream
long skip(long n)
在输入流中跳过 n个字节,返回跳过的实际字节数。
available()
返回不会阻塞的实际可用字节数。
boolean markSupport()
是否支持标记和复位操作。如果该流支持标记则返
回 true。
Void close() 关闭输入流。
Void mark(int readlimit)
在输入流的当前位置作一个标记。
Void reset() 返回最近的标记处。
java.io,OutputStream
abstract void write(int n) 写一个字节数据。
void write(byte[] b) 写数组 b中的所有字节。
void write(byte[] b,int off,int len)
将数组 b中从 off指定的位置开始 len长度的数
据输出到流中。其中参数 b表示保存数据的
数组; off是 b中的第一个需要写的字节位置;
len表示需要写的字节数。
void close() 清洗并关闭输出流。
Void flush() 清洗该输出流,即把缓冲区内
的所有数据全部发送到目的地。
输入流的继承关系
Buffered
InputStream
InputStream
ByteArray
InputStream
File
InputStream
Piped
InputStream
Sequence
InputStream
StringBuffer
InputStream
Object
InputStream
Checked
InputStream
Digest
InputStream
Inflater
InputStream
PushBack
InputStream
LineNumber
InputStream
Data
InputStream
Zip
InputStream
Gzip
InputStream
Jar
InputStream
Filter
InputStream
DataInput
Random
AccessFile
ObjectInput
通常程序员不
必使用最低级
的字节流
输出流的继承关系
通常程序员不
必使用最低级
的字节流
Data
OutputStream
Jar
OutputStream
Buffered
OutputStream
OutputStream
ByteArray
OutputStream
File
OutputStream
Piped
OutputStream
Object
OutputStream
Checked
OutputStream
Digest
OutputStream PrintStream
Deflater
OutputStream
Zip
OutputStream
Gzip
OutputStream
Filter
OutputStream
DataOutput
Random
AccessFile
ObjectOutput
Reader的继承关系
String
Reader
Reader
Buffered
Reader
CharArray
Reader
Filter
Reader
InputStream
Reader
Piped
Reader
File
Reader
PushBack
Reader
LineNumber
Reader
对于 UNICODE
文本来说,你需
要派生自 Reader
和 Writer的类。
Writer的继承关系
String
Reader
Writer
Buffered
Writer
CharArray
Writer
Filter
Writer
OutputStream
Writer
Piped
Writer
FileWriter
Print
Writer
Reader和 Writer
中的基本方法同
InputStream和
OutputStream中
的类似
Abstract int read()
Abstract void write(int b)
数据流
什么是数据流?数据流是指所有的数据通信通
道。
DataInputStream类和 DataOutputStream类创
建的对象被称为数据输入流和数据输出流。
它们允许程序按与机器无关的风格读取 java原
始程序,即我们在读取一个数值时,不必再关
心这个数据应当是多少个字节。
网络端点
文件
程序
终端
文件
程序
网络端点
数据流




文件,字符串
存储区
输入 /输出数据流的构造方法
DataInputStream( InputStream in)
将创建的数据输入流指向一个由参数 in指定
的输入流,以便于从后者读取数据(与机器
无关的风格读取)。
DataOutputStream( OutputStream out)
将创建的数据输出流指向一个由参数 out指定
的输出流,然后通过为个数据输出流把 java
数据类型的数据写到输出流。
DataIntputStream类的方法
close() 关闭流
readBoolean() 读取一个布尔值。
readByte() 读取一个字节。
readChar() 读取一个字符。
readDouble() 读取一个双精度浮点值。
readFloat() 读取一个单精度浮点值。
readInt() 从文件中读取一个 int值。
readlong() 读取一个长型值。
readShort() 读取一个短型值。
readUnsignedByte() 读取一个无符号字节。
readUTF() 读取一个无符号字符串。
DataOutputStream类的方法
writerChars( String s) 写入字符串
writerByte(String s) 写入一个字符串
writerInt(int v) 一个 int值
writerShort(int v) 一个短型值
writerLong(long v) 一个长型值
writerFloat(float v) 写入一个单精度浮点值
writerDouble(double v) 写入一个双精度浮点值
writerBoolean(boolean v) 把一个布尔值作为单字节写入
writerUTF(String s) 写入一个 UTF字符中。
UTF是 Unicode转换格式。
System类
System类管理标准输入输出流和错误流。
System.out:把输出送到缺省的显示 (通常是显
示器 )。
System.in:从标准输入获取输入 (通常是键
盘 )。
System.err:把错误信息送到缺省的显示。
每当 main方法被执行时,就自动生成上述三个
对象。
System.in是属于 BufferedInputStream类型
System.out是属于 PrintStream类型
System.err也是属于 PrintStream类型
PrintStream类
println()不属于 OutputStream类,它是
PrintStream类的子类,能提供复杂的输
出。
PrintStream类的方法有,
write,flush,checkError,print,
println,close.
其中 println可以输出多种形式的数据,例
如, println(String s),println(char c)