IO流

流:
内存与存储设备之间传输数据的通道。
分类:
按方向:
输入流:将设备中的内容读入到内存中。
输出流:将内存中的内容写入到设备中。
按单位:
字节流:以字节为单位,可以读写所有数据。
字符流:以字符为单位,只能读写文本数据。
按功能:
节点流:具有实际传输数据的读写功能。
过滤流:在节点流的基础之上增强功能。
字节节点流:
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;
	}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值