流:
内存与存储设备之间传输数据的通道。
分类:
按方向:
输入流:将设备中的内容读入到内存中。
输出流:将内存中的内容写入到设备中。
按单位:
字节流:以字节为单位,可以读写所有数据。
字符流:以字符为单位,只能读写文本数据。
按功能:
节点流:具有实际传输数据的读写功能。
过滤流:在节点流的基础之上增强功能。
字节节点流:
FileOutputStream:
write(byte[] byte) //字节流,将数组中所有字节,写入输出流。
FileInputStream:
read(byte[] byte) //从流中读字节,将内容存入数组,返回字节数;文件的尾部返回-1。
字节过滤流:
缓冲流:BufferedOutputStream、BufferedInputStream
提高IO效率,减少访问磁盘的次数;
数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close。
对象流:
ObjectOutputStream、ObjectInputStream
增强了缓冲区功能
增强了读写8种基本数据类型和字符串功能
增强了读写对象的功能:
readObject() 从流中读取一个对象
writeObject(Object obj) 向流中写入一个对象
使用流传输对象的过程称为序列化、反序列化。
对象序列化:
必须实现Serializable接口。
必须保证其所有属性均可序列化。
transient修饰为临时属性,不参与序列化。
读取到文件尾部的标志:java.io.EOFException。
作业:
3、(流的分类)对于FileInputStream来说,从方向上来分,它是输入流,从数据单位上分,它是字节流,从功能上分,它是节点流
4、(字节流)FileInputStream有三个重载的read方法,其中:
I.无参的read方法返回值为int类型,表示返回读取字节。
II.intread(byte[]bs)方法返回值表示数组个数,参数表示读取数组。
III.intread(byte[]bs,int offset,int len)方法返回值表示读取的数组,参数分别表示开始位置、长度。
5.(字节流)下面关于FileInputStream类型说法正确的是:A , B
A.创建FileInputStream对象是为了读取硬盘上的文件
B.创建FileInputStream对象时,如果硬盘上对应的文件不存在,则抛出一个异常
C.利用FileInputStream对象可以创建文件D.FileInputStream对象读取文件时,只能读取文本文件
6.(字节流)填空:
I.创建FileOutputStream对象时,如果对应的文件在硬盘上不存在,则会创建新对象;如果对应的文件在硬盘上已经存在,则覆
盖;
II.如果使用FileOutputStream(String path,boolean append)构造方法创建FileOutputStream对象,并给定第二个参数为true,则
效果为添加数据。
创建FileOutputStream时不会产生异常。
13 、为了让某对象能够被序列化,要求其实现Serializable接口;
为了让该对象某个属性不参与序列化,应当使用transient修饰符。
15、在PrintWriter中,有一个方法print(Object obj)
在ObjectOutputStream中,有一个方法writeObject(Object obj)
请简述这两个方法的区别?
writeObject序列化与print非序列化,在流中对象保证序列化
7、
import java.io.FileInputStream;
import java.io.IOException;
public class TestFileInputStream {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("Files\\test.txt");
try {
fis.read();
} finally {
fis.close();
}
}
}
8、
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("Files\\test.txt");
fos.write('H');
fos.write('e');
fos.write('l');
fos.write('l');
fos.write('o');
fos.write(' ');
fos.write('W');
fos.write('o');
fos.write('r');
fos.write('l');
fos.write('d');
FileInputStream fis = new FileInputStream("Files\\test.txt");
while (true) {
try {
System.out.println(fis.read());
} catch (Exception e) {
break;
} finally {
fis.close();
}
}
}
}
16、
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
public class TextSerializable {
public static void main(String[] args) throws IOException {
Address address = new Address("北京", "100000");
Worker worker = new Worker("tom", "18", address);
OutputStream os = new FileOutputStream("fout.dat");
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(worker);
oos.close();
}
}
class Address implements Serializable {
private String addressName;
private String zipCode;
public Address(String addressName, String zipCode) {
super();
this.addressName = addressName;
this.zipCode = zipCode;
}
public String getAddressName() {
return addressName;
}
public String getZipCode() {
return zipCode;
}
public void setAddressName(String addressName) {
this.addressName = addressName;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
}
class Worker implements Serializable {
private String name;
private Integer age;
private Address address;
public Worker(String name, Integer age, Address address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public Worker(String name2, String string, Address address2) {
// TODO Auto-generated constructor stub
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public Address getAddress() {
return address;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setAddress(Address address) {
this.address = address;
}
}