JavaIO流的总结!

IO流:

 

                      输出流:OutputStreamWriter 作为基类

 

按流向区分

 

                   输入流:InputStreamReader 作为基类

 

输入输出流是相对于计算机内存来说的,而不是相对于源和目标。

                                                     字节流输出:InputStream

                                      字节流:字节流输入:OutputStream

按照处理数据单元划分

                                     字符流:字符流输出:Reader

                                                   字符流输入:Writer

字节流是8位通用字节流,字符流是16Unicode字符流。

 

节点流:可以直接从数据源或目的地读写数据。

处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。目的主要是简化操作和提高性能。

节点流和处理流的关系:

节点流处于io操作的第一线,所有操作必须通过他们进行。处理流可以对其他流进行处理(提高效率或操作灵活性)。

文本读写:用FileInputStream FileOutputStream BufferedReader BufferedWriter

二进制文件的读写:

DataInputStream DataOutputStream 读写二进制文件以及基本数据类型

对象的读写:

ObjectInputStream ObjectOutputStream读写对象(序列化和反序列化)

创建FileOutputStream(String name,bolleanappend)实例时,如果相应的文件并不存在,则会自动创建一个空的文件。不加后面boolean类型的判断时,则会覆盖文件中的所有内容。

// 创建一个文件输入字节流对象
		File f = new File("d:/abc.txt");
		FileInputStream fis = new FileInputStream(f);
		// 开始读每次一个字节
		int len ;
		byte[] b = new byte[1024];
		while ((len=fis.read(b)) != -1) {
			// byte[]转String
			System.out.println(new String(b));
		}
		// 读完之后 
		fis.close();

FileReader fr = new FileReader("d:/123.txt");
		int len = 0;
		char[] a = new char[1024];
		StringBuffer sb = new StringBuffer();
		while ((len = fr.read(a)) != -1) {
			sb.append(a);
		}
		fr.close();
以上是文件读写的两个例子。

缓冲流:带有缓冲区可以提高读取的速度。

BufferedInputStream BufferedOutputStream 字节缓冲流

BufferedReader BufferedWriter 字符缓冲流

		FileWriter fw=new FileWriter("d:/123.txt");
		BufferedWriter bw=new BufferedWriter(fw);
		fw.write("世界如此美好!");
		bw.flush();//刷新缓存(只有刷新了才可以写入文件)
		fw.close();
		bw.close();

字节流转字符流:InputStreamReader(字符流对象,编码方式”)

序列化和反序列化 目的:持久化对象,将对象在网络上进行传输。

序列化:将内存中的对象转换位流。

反序列化:将流装换为内存中的对象。

 

ObjectOutputStream ots=new ObjectOutputStream(new FileOutputStream("d:/123.txt"));
		ots.writeObject(new Student2("张三",22,"男"));//序列化
		ots.close();
		ObjectInputStream ois=new ObjectInputStream(new FileInputStream("d:/123.txt"));
		Student2 stu=(Student2)ois.readObject();//反序列化
		ois.close();
		System.out.println(stu);

对象流ObjectInputStream

1、           必须实现Serializable接口

2、           给类增加序列化编号,给类定义一个标记,新的修改后的类还可以操作曾经序列化的对象。

3、           静态是不能被序列化的,序列化只能对堆中的进行序列化。

4、           不需要序列化的字段前加transient



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值