001-SE-0009-其他流

打印流

* 只有输出流
	* printStream
	* printWriter
	* 可以打印任意类型的数据
	* 有自动刷新功能,需要手动启动
	* 可以直接操作文本的(这里说的直接操作文件就是有直接传入File对象的构造方法的流,高效流不可以操作文件)

	* printWriter使用举例:
		PrintWriter pw = new PrintWriter("fos.txt");
		pw.write("hello");
		pw.print(100);
		pw.close();//该流需要刷新才能写入文件,close会刷新

		/*
		 * 使用下面构造方法创建打印流对象时参数true表示开启自动刷新,
		 * 开启自动刷新后只能使用以下三个方法进行打印,其他方法不会自动刷新
		 * 	println()
		 * 	printf()
		 *  format()
		 */
		PrintWriter pw = new PrintWriter(new FileWriter("fos.txt"), true);
		pw.format("hello world");

标准输入输出流

* System类有2个成员变量
	public static final InputStream in;//标准输入流
	public static final PrintStream out;//标准输出流
	* System.in
		* 类型是InputStrema
		* InputStream is = System.in;
	* System.out
		* 类型是PrintStream,是FileOutputStream的子类
		* PrintStream ps = System.out;
		* printStream.println = System.out.println

序列化和反序列化流

* ObjectOutputStream
	* ObjectInputStream
	* 使用举例:
		* 定义一个类
		* 重写toString()方法
		* 实现Serializable接口
			public class Animal implements Serializable {
				private String color;
				private String weight;
				public Animal(String color, String weight) {
					super();
					this.color = color;
					this.weight = weight;
				}
				@Override
				public String toString() {
					return "Animal [color=" + color + ", weight=" + weight + "]";
				}
			}
		* 序列化一个对象后再反序列化
			public static void main(String[] args) throws Exception {
				Animal a = new Animal("red","50kg");
				ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("oos.txt"));
				oos.writeObject(a);
				ObjectInputStream ois = new ObjectInputStream(new FileInputStream("oos.txt"));
				Object obj = ois.readObject();
				System.out.println(obj);
			}
		* 可能出现的问题
			* java类在实现Serializable接口后会有一个序列化值标记这个类
			* 如果修改了类中的属性则这个值也会发生变化
			* 如果使用序列化流序列化一个类的对象之后更改了类的属性,序列化值发生变化,在发序列化的时候序列化会不匹配,发生异常
			* 在类中生成一个固定的序列化值,这样即使修改了类中的属性,序列化值也不会发生变化
		* 使用transient关键字修饰一个变量,该变量会在类的对象序列化时不被序列化
			* 例如:private transient int age;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值