第八章 JAVA I/O系统
杨 娟
it@126.com
Java 程序设计
教学内容
? 文件类
? JavaI/O结构
? 标准流、文件流、过滤器流、字符流的使用
? 对象序列化
引入
? 什么是数据流?
? 字节流和字符流的基类各是什么?
? 什么是对象的串行化?对象串行化的作用是
什么?
8.1 System类
输入输出方法
System类管理标准输入输出流和错误流
? System.out
把输出送到缺省的显示 (通常是显示器 )
? System.in
从标准输入获取输入 (通常是键盘 )
? System.err
把错误信息送到缺省的显示
注意(每当 main方法被执行时,就自动生成上述三个对象)
public class ReadHello
{ public static void main(String args[])
{ char inchar;
System.out.println(“Enter a character:”);
try{ inChar=(char)System.in.read();
Syste.out.println(“,+ inChar);
}catch(IOException e)
{ Sytem.out.println(“Error reading from user”);
}
}
} 运行结果为?
例 8.1
import java.io.*;
class IOTest
{ public statics void main(String args[])
{try { byte bArray[]=new byte[128];
System.out.println(“Enter something:”);
System.in.read(bArray);
System.out.print(“You entered:”);
System.out.println(bArray);
}catch(IOException ioe)
{ System.out.println(ioe.toString()); }
}
请同学各自运行程序看有什么结果!
例 8.2
思考
为什么输入的是字符,输出是乱码?
原因,System.out.println(bArray)输出的是数组的地
址而不是字符
改进,将字符数组变换成字符串
原来是,System.out.println(bArray);
现在为,String s=new String(bArray,0);
System.out.println(s);
System.in 是属于 BufferedInputStream类型
System.out 是属于 PrintStream类型
System.err 也是属于 PrintStream类型
8.2 输入输出类
InputStream
OutputStream
8.2 输入输出类
? Java中每一种流的基本功能依赖于基本类
?InputStream
?OutputStream
? 它们是抽象类,不能直接使用
? read(),从流中读入数据
? skip(),跳过流中若干字节数
? available(),返回流中可用字节数
? mark(),在流中标记一个位置
? reset(),返回标记过得位置
? markSupport():是否支持标记和复位操作
? close(),关闭流
1,InputStream类
? int read():
读一个整数
? int read(byte b[]):
读多个字节到数组中
? int read(byte,int off,int len);
从输入流读取最多 len字节数据存入缓冲区 b中,
并且所读取数据从数组 b的第 off个位置开始存放
read()
import java.io.*; //导入 java.io中的所有类
public class TestInputStream
{
public static void main(String args[])
{
int count;
byte input[] = new byte[256]; //用于字符输入缓冲的数组
String s;
BufferedInputStream bufin = new
BufferedInputStream(System.in);
//用 System.in为参数创建缓冲字节输入流对象 bufin
例 8.3
try //异常处理
{ System.out.print("输入字节,");
bufin.mark(256);
count = bufin.read(input);
//将键盘输入的字节放入字节输入缓冲数组 input中
System.out.println("您输入的字节个数, " + count);
s = new String(input,0,count);
//创建字符串对象,初始字符串长度为 count-1
System.out.println("文件中的字符为, " );
FileInputStream filein = new
FileInputStream("TestInputStream.java");
//用文件名 "a.txt"为参数创建文件字节输入流对象 filein
while (filein.read(input)!=-1)
//从文件中逐个读入字节到输入字节缓冲数组 input中直到文
件结束
{ System.out.println(new String(input)); }
//将 input中的字节在屏幕上显示,系统将自动转换为字符形
式显示
filein.close(); //关闭文件字节输入流
bufin.close(); //关闭缓冲字节输入流
}
catch(IOException e)
{ System.out.println(“I/O错误” ); }
}
}
? write(int b):将一个整数输出到流中
? write(byte b[]):将数组中的数据输出到流中
? write(byte b[],int off,int len):将数组 b中从 off指
定的位置开始 len长度的数据输出到流中
? flush():将缓冲区中的数据强制送出
? close():关闭流
2,OutputStream类
例 8.3
import java.io.*;
public class TestOutputStream
{
public static void main(String args[])
{ int count;
byte input[] = new byte[256]; //用于字节输入缓冲的数组
String s;
BufferedInputStream bufin = new
BufferedInputStream(System.in);
//用键盘输入创建缓冲字节输入流对象 bufin
BufferedOutputStream bufout =new
BufferedOutputStream(System.out);
//用屏幕输出创建缓冲字节输出流对象 bufout
try{
System.out.print(" 输入字节,");
count = bufin.read(input);
//将键盘输入的字节放入字节输入缓冲数组 input中
System.out.println("您输入的字节个数, " + count);
System.out.print("您输入的字符串为, " );
bufout.write(input,0,count);
//将 input中的所有字节写到字节输出缓冲数组中
bufout.flush(); //将字节输出缓冲数组内容输出
FileOutputStream fileout= new
FileOutputStream("1.xls",true);
//创建文件字节输出流对象 fileout,参数为文件名 "a.txt"
fileout.write(input,0,count);
//将 input中的所有字节写到对象 fileout中
bufin.close(); //关闭缓冲字节输入流
bufout.close(); //关闭缓冲字节输出流
fileout.close(); //关闭文件字节输出流
}
catch(IOException e)
{ System.out.println("I/O错误 "); }
}
}
PrintStream类的方法有,
? Write
? Flush
? checkError
? Print
? Println
? close
其中 println可以输出多种形式的数据,例如,
println(String s),println(char c)等
( 注意, println与 print区别 )
PrintStream类
8.3 File
8.3 File
三个构造方法:
? File(String filename);
? File(String directory,String filename);
? File(File directory,String filename);
1 文件对象
File f=new File(“data”,temp.dat”);
? f.getName(),返回文件名 temp.dat
? f.getParent():返回文件所在目录名 data
? f.getPath(),返回文件路径 data\temp.dat
? f.getAbsolutePath():返回绝对路径
c:\myprog\data\temp.dat
? FileInputStream 打开一个输入文件
FileInputStream in=new FileInputStream(fp);
? FileOutputStream 打开一个输出文件
FileOutputStream out=new FileOutputStream(fp);
2、文件流的建立
3 例,文件拷贝 (注意要捕获文件异常 )
输入流的参数是用于输入的文件名
输出流的参数是用于输出的文件名
import java.io.*;
class filestream
{ public static void main(String args[])
File inFile=new File("file1.txt");
File outFile=new File("file2.txt");
FileInputStream fis=new FileInputStream(inFile);
FileOutputStream fos=new FileOutputStream(outFile);
int c; while((c=fis.read())!=-1) fos.write(c);
fis.close(); fos.close();
}catch(FileNotFoundException e) {
System.out.println("FileStreamsTest,"+e);
}}}
例 8.5
说明:增加缓冲区流,减少访问硬盘的次数,提高效率
利用缓冲区流, BufferedInputStream和
BufferedOutputStream 将它们与文件流相接
FileInputStream in=new FileInputStream(“file1.txt”);
BufferedInputStream bin=new BufferedInputStream(in,257)
int len; byte bArray[]=new byte[257];
len=bin.read(bArray);
len中得到是长度,bArray中得到的是数据
只有缓冲区满时,才会将数据送到输出流,
Java在输出数据流中,当对方尚未将数据取走时,程序就会被阻
塞,
有时要人为地将尚未填满的缓冲区中的数据送出,使用 flush()方
法,
8.4 数据输入输出流
DataInputStream
DataInputStream
8.4 数据输入输出流
? 文件流和缓冲区流的处理对象是字节或字节
数组,利用数据输入输出流可以实现对文件
的不同数据类型的读写,一种较为高级的数
据输入输出方式,除了字节和字节数组,还可
以处理 int,float,boolean等类型,还可以用
readLine方法读取一行信息
? 可使用的方法,
write,writeBoolean…,read,readByte… 等
1、数据流的建立
? FileOutputStream fos= new
FileOutputStream(”file2.txt"));
? DataInputStream dis= new
DataInputStream(fos)
2、数据输出流可以是一个已经建立好的输入
数据流对象,例如网络的连结,文件等,
数据流的建立
下面的例子显示如何利用数据输入输出流往文件中写不同类型
的数据
class datainput_output
{ public static void main(String args[]) throws IOException
{ FileOutputStream fos=new FileOutputStream(“a.txt”);
DataOutputStream dos=new DataOutputStream (fos);
try{ dos.writeBoolean(true);
dos.writeByte((byte)123);
dos.writeChar('J');
dos.writeDouble(3.141592754);
dos.writeFloat(2.7182f);
dos.writeInt(1234577890);
dos.writeLong(998877775544332211L);
例 8.6
dos.writeShort((short)11223);
}finally{ dos.close(); }
DataInputStream dis=new DataInputStream(
new FileInputStream("a.txt"));
try{ System.out.println("\t "+dis.readBoolean());
System.out.println("\t "+dis.readByte());
System.out.println("\t "+dis.readChar());
System.out.println("\t "+dis.readDouble());
System.out.println("\t "+dis.readFloat());
System.out.println("\t "+dis.readInt());
System.out.println("\t "+dis.readLong());
System.out.println("\t "+dis.readShort());
}finally{dis.close();}
}}
DateLine(InputStream in)(计算字符和行数 )
{ DataInputStream data=new DataInputStream(in);
String currentLine;
int lineCount=0; int charCount=0;
while((currentLine=dataIn.readLine())!=null)
{ ++lineCount;
charCount+=currentLine.length();
}
return (charCount/(float)lineCount);
}
8.5 随机文件读写
RandomAccessFile
8.5 RandomAccessFile
1、创建一个随机文件
new RandomAccessFile(“file1.txt”,“r”);
new RandomAccessFile(“file2.txt”,“rw”);
随机文件可以同时完成读和写操作,
readXXX()或 writeXXX()
skipBytes(); 将指针乡下移动若干字节
seek(),将指针调到所需位置
getFilePointer(),返回指针当前位置
length(),返回文件长度
利用 seek(long pos)方法查找随机文件中的信息
2、例,把若干个 32位的整数写到一个名为, temp.dat”
的文件中,然后利用 seek方法,以相反的顺序再读取
这些数据
8.6 unicode
8.6 java 中的 unicode
在 java中用 unicode 表示字符和字符串
? DatainputStream的 readLine方法,以字节
形式读入,以 unicode形式输出
? DataInputStream不适合输入是 unicode的形
式
? 处理字符用 InputStreamReader 类和
BufferedReader 类 (jdk1.1)
问题,
? 如果字符流不是来自本地,有可能编码不一
样,直接读取会读出不正确字符?
处理方法,
ir=new InputStreamReader(is,”8859_1”);
采用的是 iso8859_1编码方式,在不同平台之
间正确转换字符,
import java.io.*;
class filetounicode
{ public static void main(String args[])
{FileInputStream fis=new
FileInputStream("toyamei.txt");
InputStreamReader dis=new
InputStreamReader(fis);
BufferedReader reader=new String s;
BufferedReader(dis);
while((s=reader.readLine())!=null)
{ System.out.println("read,"+s);}
dis.close();
}}
例 8.9
8.7 对象流
8.7 对象流
? 对象流是怎样工作的?
? 允许可串行化的对象在流中传输
只有实现 serializable接口的类才能被串行化
public class Student implements Serializable
{ int id;String name; int age;
String department;
public Student(int id,String name,int age,
String department)
{ this.id=id; this.name=name;
this.age=age; this.department =departmernt;
}
}
实现 serializable接口
2、对象流举例,
例 8.10,将 Student类的一个实例写到文件中
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class Objectser
{ public static void main(String args[])
Student stu=new Student(981037,“Li Ming”,17,“CSD”);
{ FileOutputStream fo=new FileOutputStream(“date.ser”);
ObjectOutputStream so=new ObjectOutputStream(fo);
os.writeObject(stu);so.close();
}
}
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class ObjectRecov
{ public static void main(String args[])
{ Student stu;
FileInputStream fi=new
FileInputStream(“date.ser”);
ObjectInputStream si=new
ObjectInputStream(fi);
stu=(Student)si.readObject();si.close();
System.out.println(“ID:,+stu.id+“name:”+
stu.name+“age:”+age+“dept.:”+stu.department);
}}
小结
? 在 Java中有数据传输的地方都用到 I/O流 (通
常是文件,网络,内存和标准输入输出等 )
? InputStream 和 OutputStream是所有 I/O流
的祖先 (只有 RandomAccessFile类是一个例
外 ),read和 write是它们最基本的方法,读写单
位是字节,
? File,File(Input/Output)Stream,
RandomAccessFile是处理本地文件的类
? Data(Input/Output)Stream是一个过滤流的子
类,借此可以读写各种基本数据,在文件和网
络中经常使用,如, readByte,writeBoolean等,
? Buffered(Input/Output)Stream的作用是在数
据送到目的之前先缓存,达到一定数量时再送
到目的,已减少阻塞次数,
课后习题
? 8.1
? 8.3
结束!
杨 娟
it@126.com
Java 程序设计
教学内容
? 文件类
? JavaI/O结构
? 标准流、文件流、过滤器流、字符流的使用
? 对象序列化
引入
? 什么是数据流?
? 字节流和字符流的基类各是什么?
? 什么是对象的串行化?对象串行化的作用是
什么?
8.1 System类
输入输出方法
System类管理标准输入输出流和错误流
? System.out
把输出送到缺省的显示 (通常是显示器 )
? System.in
从标准输入获取输入 (通常是键盘 )
? System.err
把错误信息送到缺省的显示
注意(每当 main方法被执行时,就自动生成上述三个对象)
public class ReadHello
{ public static void main(String args[])
{ char inchar;
System.out.println(“Enter a character:”);
try{ inChar=(char)System.in.read();
Syste.out.println(“,+ inChar);
}catch(IOException e)
{ Sytem.out.println(“Error reading from user”);
}
}
} 运行结果为?
例 8.1
import java.io.*;
class IOTest
{ public statics void main(String args[])
{try { byte bArray[]=new byte[128];
System.out.println(“Enter something:”);
System.in.read(bArray);
System.out.print(“You entered:”);
System.out.println(bArray);
}catch(IOException ioe)
{ System.out.println(ioe.toString()); }
}
请同学各自运行程序看有什么结果!
例 8.2
思考
为什么输入的是字符,输出是乱码?
原因,System.out.println(bArray)输出的是数组的地
址而不是字符
改进,将字符数组变换成字符串
原来是,System.out.println(bArray);
现在为,String s=new String(bArray,0);
System.out.println(s);
System.in 是属于 BufferedInputStream类型
System.out 是属于 PrintStream类型
System.err 也是属于 PrintStream类型
8.2 输入输出类
InputStream
OutputStream
8.2 输入输出类
? Java中每一种流的基本功能依赖于基本类
?InputStream
?OutputStream
? 它们是抽象类,不能直接使用
? read(),从流中读入数据
? skip(),跳过流中若干字节数
? available(),返回流中可用字节数
? mark(),在流中标记一个位置
? reset(),返回标记过得位置
? markSupport():是否支持标记和复位操作
? close(),关闭流
1,InputStream类
? int read():
读一个整数
? int read(byte b[]):
读多个字节到数组中
? int read(byte,int off,int len);
从输入流读取最多 len字节数据存入缓冲区 b中,
并且所读取数据从数组 b的第 off个位置开始存放
read()
import java.io.*; //导入 java.io中的所有类
public class TestInputStream
{
public static void main(String args[])
{
int count;
byte input[] = new byte[256]; //用于字符输入缓冲的数组
String s;
BufferedInputStream bufin = new
BufferedInputStream(System.in);
//用 System.in为参数创建缓冲字节输入流对象 bufin
例 8.3
try //异常处理
{ System.out.print("输入字节,");
bufin.mark(256);
count = bufin.read(input);
//将键盘输入的字节放入字节输入缓冲数组 input中
System.out.println("您输入的字节个数, " + count);
s = new String(input,0,count);
//创建字符串对象,初始字符串长度为 count-1
System.out.println("文件中的字符为, " );
FileInputStream filein = new
FileInputStream("TestInputStream.java");
//用文件名 "a.txt"为参数创建文件字节输入流对象 filein
while (filein.read(input)!=-1)
//从文件中逐个读入字节到输入字节缓冲数组 input中直到文
件结束
{ System.out.println(new String(input)); }
//将 input中的字节在屏幕上显示,系统将自动转换为字符形
式显示
filein.close(); //关闭文件字节输入流
bufin.close(); //关闭缓冲字节输入流
}
catch(IOException e)
{ System.out.println(“I/O错误” ); }
}
}
? write(int b):将一个整数输出到流中
? write(byte b[]):将数组中的数据输出到流中
? write(byte b[],int off,int len):将数组 b中从 off指
定的位置开始 len长度的数据输出到流中
? flush():将缓冲区中的数据强制送出
? close():关闭流
2,OutputStream类
例 8.3
import java.io.*;
public class TestOutputStream
{
public static void main(String args[])
{ int count;
byte input[] = new byte[256]; //用于字节输入缓冲的数组
String s;
BufferedInputStream bufin = new
BufferedInputStream(System.in);
//用键盘输入创建缓冲字节输入流对象 bufin
BufferedOutputStream bufout =new
BufferedOutputStream(System.out);
//用屏幕输出创建缓冲字节输出流对象 bufout
try{
System.out.print(" 输入字节,");
count = bufin.read(input);
//将键盘输入的字节放入字节输入缓冲数组 input中
System.out.println("您输入的字节个数, " + count);
System.out.print("您输入的字符串为, " );
bufout.write(input,0,count);
//将 input中的所有字节写到字节输出缓冲数组中
bufout.flush(); //将字节输出缓冲数组内容输出
FileOutputStream fileout= new
FileOutputStream("1.xls",true);
//创建文件字节输出流对象 fileout,参数为文件名 "a.txt"
fileout.write(input,0,count);
//将 input中的所有字节写到对象 fileout中
bufin.close(); //关闭缓冲字节输入流
bufout.close(); //关闭缓冲字节输出流
fileout.close(); //关闭文件字节输出流
}
catch(IOException e)
{ System.out.println("I/O错误 "); }
}
}
PrintStream类的方法有,
? Write
? Flush
? checkError
? Println
? close
其中 println可以输出多种形式的数据,例如,
println(String s),println(char c)等
( 注意, println与 print区别 )
PrintStream类
8.3 File
8.3 File
三个构造方法:
? File(String filename);
? File(String directory,String filename);
? File(File directory,String filename);
1 文件对象
File f=new File(“data”,temp.dat”);
? f.getName(),返回文件名 temp.dat
? f.getParent():返回文件所在目录名 data
? f.getPath(),返回文件路径 data\temp.dat
? f.getAbsolutePath():返回绝对路径
c:\myprog\data\temp.dat
? FileInputStream 打开一个输入文件
FileInputStream in=new FileInputStream(fp);
? FileOutputStream 打开一个输出文件
FileOutputStream out=new FileOutputStream(fp);
2、文件流的建立
3 例,文件拷贝 (注意要捕获文件异常 )
输入流的参数是用于输入的文件名
输出流的参数是用于输出的文件名
import java.io.*;
class filestream
{ public static void main(String args[])
File inFile=new File("file1.txt");
File outFile=new File("file2.txt");
FileInputStream fis=new FileInputStream(inFile);
FileOutputStream fos=new FileOutputStream(outFile);
int c; while((c=fis.read())!=-1) fos.write(c);
fis.close(); fos.close();
}catch(FileNotFoundException e) {
System.out.println("FileStreamsTest,"+e);
}}}
例 8.5
说明:增加缓冲区流,减少访问硬盘的次数,提高效率
利用缓冲区流, BufferedInputStream和
BufferedOutputStream 将它们与文件流相接
FileInputStream in=new FileInputStream(“file1.txt”);
BufferedInputStream bin=new BufferedInputStream(in,257)
int len; byte bArray[]=new byte[257];
len=bin.read(bArray);
len中得到是长度,bArray中得到的是数据
只有缓冲区满时,才会将数据送到输出流,
Java在输出数据流中,当对方尚未将数据取走时,程序就会被阻
塞,
有时要人为地将尚未填满的缓冲区中的数据送出,使用 flush()方
法,
8.4 数据输入输出流
DataInputStream
DataInputStream
8.4 数据输入输出流
? 文件流和缓冲区流的处理对象是字节或字节
数组,利用数据输入输出流可以实现对文件
的不同数据类型的读写,一种较为高级的数
据输入输出方式,除了字节和字节数组,还可
以处理 int,float,boolean等类型,还可以用
readLine方法读取一行信息
? 可使用的方法,
write,writeBoolean…,read,readByte… 等
1、数据流的建立
? FileOutputStream fos= new
FileOutputStream(”file2.txt"));
? DataInputStream dis= new
DataInputStream(fos)
2、数据输出流可以是一个已经建立好的输入
数据流对象,例如网络的连结,文件等,
数据流的建立
下面的例子显示如何利用数据输入输出流往文件中写不同类型
的数据
class datainput_output
{ public static void main(String args[]) throws IOException
{ FileOutputStream fos=new FileOutputStream(“a.txt”);
DataOutputStream dos=new DataOutputStream (fos);
try{ dos.writeBoolean(true);
dos.writeByte((byte)123);
dos.writeChar('J');
dos.writeDouble(3.141592754);
dos.writeFloat(2.7182f);
dos.writeInt(1234577890);
dos.writeLong(998877775544332211L);
例 8.6
dos.writeShort((short)11223);
}finally{ dos.close(); }
DataInputStream dis=new DataInputStream(
new FileInputStream("a.txt"));
try{ System.out.println("\t "+dis.readBoolean());
System.out.println("\t "+dis.readByte());
System.out.println("\t "+dis.readChar());
System.out.println("\t "+dis.readDouble());
System.out.println("\t "+dis.readFloat());
System.out.println("\t "+dis.readInt());
System.out.println("\t "+dis.readLong());
System.out.println("\t "+dis.readShort());
}finally{dis.close();}
}}
DateLine(InputStream in)(计算字符和行数 )
{ DataInputStream data=new DataInputStream(in);
String currentLine;
int lineCount=0; int charCount=0;
while((currentLine=dataIn.readLine())!=null)
{ ++lineCount;
charCount+=currentLine.length();
}
return (charCount/(float)lineCount);
}
8.5 随机文件读写
RandomAccessFile
8.5 RandomAccessFile
1、创建一个随机文件
new RandomAccessFile(“file1.txt”,“r”);
new RandomAccessFile(“file2.txt”,“rw”);
随机文件可以同时完成读和写操作,
readXXX()或 writeXXX()
skipBytes(); 将指针乡下移动若干字节
seek(),将指针调到所需位置
getFilePointer(),返回指针当前位置
length(),返回文件长度
利用 seek(long pos)方法查找随机文件中的信息
2、例,把若干个 32位的整数写到一个名为, temp.dat”
的文件中,然后利用 seek方法,以相反的顺序再读取
这些数据
8.6 unicode
8.6 java 中的 unicode
在 java中用 unicode 表示字符和字符串
? DatainputStream的 readLine方法,以字节
形式读入,以 unicode形式输出
? DataInputStream不适合输入是 unicode的形
式
? 处理字符用 InputStreamReader 类和
BufferedReader 类 (jdk1.1)
问题,
? 如果字符流不是来自本地,有可能编码不一
样,直接读取会读出不正确字符?
处理方法,
ir=new InputStreamReader(is,”8859_1”);
采用的是 iso8859_1编码方式,在不同平台之
间正确转换字符,
import java.io.*;
class filetounicode
{ public static void main(String args[])
{FileInputStream fis=new
FileInputStream("toyamei.txt");
InputStreamReader dis=new
InputStreamReader(fis);
BufferedReader reader=new String s;
BufferedReader(dis);
while((s=reader.readLine())!=null)
{ System.out.println("read,"+s);}
dis.close();
}}
例 8.9
8.7 对象流
8.7 对象流
? 对象流是怎样工作的?
? 允许可串行化的对象在流中传输
只有实现 serializable接口的类才能被串行化
public class Student implements Serializable
{ int id;String name; int age;
String department;
public Student(int id,String name,int age,
String department)
{ this.id=id; this.name=name;
this.age=age; this.department =departmernt;
}
}
实现 serializable接口
2、对象流举例,
例 8.10,将 Student类的一个实例写到文件中
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class Objectser
{ public static void main(String args[])
Student stu=new Student(981037,“Li Ming”,17,“CSD”);
{ FileOutputStream fo=new FileOutputStream(“date.ser”);
ObjectOutputStream so=new ObjectOutputStream(fo);
os.writeObject(stu);so.close();
}
}
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class ObjectRecov
{ public static void main(String args[])
{ Student stu;
FileInputStream fi=new
FileInputStream(“date.ser”);
ObjectInputStream si=new
ObjectInputStream(fi);
stu=(Student)si.readObject();si.close();
System.out.println(“ID:,+stu.id+“name:”+
stu.name+“age:”+age+“dept.:”+stu.department);
}}
小结
? 在 Java中有数据传输的地方都用到 I/O流 (通
常是文件,网络,内存和标准输入输出等 )
? InputStream 和 OutputStream是所有 I/O流
的祖先 (只有 RandomAccessFile类是一个例
外 ),read和 write是它们最基本的方法,读写单
位是字节,
? File,File(Input/Output)Stream,
RandomAccessFile是处理本地文件的类
? Data(Input/Output)Stream是一个过滤流的子
类,借此可以读写各种基本数据,在文件和网
络中经常使用,如, readByte,writeBoolean等,
? Buffered(Input/Output)Stream的作用是在数
据送到目的之前先缓存,达到一定数量时再送
到目的,已减少阻塞次数,
课后习题
? 8.1
? 8.3
结束!