千锋逆战班学习日志

这篇博客详细介绍了Java中的I/O流框架,包括流的概念、分类以及字节流和字符流的相关操作。博主通过实例讲解了FileInputStream和FileOutputStream的使用,包括读写文件、异常处理和文件追加。此外,还提到了对象序列化的重要性以及如何实现和避免序列化某些属性。
摘要由CSDN通过智能技术生成


千锋逆战班学习第31天
努力或许没有收获,但不努力一定没收获,加油。
今天我学了Java课程的I/O框架。
中国加油!!!武汉加油!!!千锋加油!!!我自己加油!!!

总结-I/O框架

  1. 流:
  • 概念:内存与存储设备之间传输数据的通道,数据借助流传输。
  1. 流的分类:
  • 按方向分【重点】
    • 输入流:将<存储设备>中的内容读入到<内存>中。
    • 输出流:将<内存>中的内容写入到<存储设备>中。
      在这里插入图片描述
  • 按单位:
    • 字节流:以字节为单位,可以读写所有数据。
    • 字符流:以字符为单位,只能读写文本数据。
  • 按功能:
    • 节点流:具有实际传输数据的读写功能。
    • 过滤流:在节点流基础之上增强功能。
  1. 字节流:
  • 字节流的父亲(抽象类):
    • InputStream:字节输入流
      • public int read( ) {}//返回字节的ASCII码
      • public int read( byte[] b ) {}//返回有效数据个数
      • public int read( byte[] b , int off, int len ) {}
    • OutputStream:字节输出流
      • public void write( int n ) { }
      • public void write( byte[] b ){ }
      • public void write ( byte[] b, int off , int len ){ }
  • 字节节点流:
    • FileOutputStream:
      • public void write(byte[] b)//一次写多个字节,将b数组中所有字节,写入输出流。
    • FileInputStream:
      +public void read(byte[] b)//从流中读取多个字节,将读到的内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1。
  • 字节过滤流:
    • 缓冲流:BufferedOutputStream/BufferedInputStream
      • 有参构造需要一个字节输出节点流,要先创建字节输出节点流。
      • 提高IO效率,减少访问磁盘的次数。
      • 数据存储在缓冲区中,flush是将缓冲区的内容写入文件中,也可以直接close
        在这里插入图片描述
    • 对象流:
      • 使用流传输对象的过程称为序列化、反序列化。
      • 增强了缓冲区功能。
      • 增强了读写8种基本数据类型和字符串功能。
      • 增强了读写对象的能力:
        • readObject()从流中读取一个对象。
        • writeObject(Object obj)向流中写入一个对象。
  • 对象序列化:
    • 对象序列化的细节:
      • 必须实现Serializable接口。
      • 必须保证其所有属性均可序列化。引用数据类型的数组,其数组类型必须支持序列化(实现Serializable接口)。
      • 不能使用static静态类型
      • transient修饰为临时属性,不参与序列化。
      • 读到文件尾部的标志:java.io.EOFExoeption。(异常,建议try{ while(true){}}catch{})

Question_13_3

3.(流的分类)对于FileInputStream 来说,从方向上来分,它是 ——流,从数据单位上分,它是 ———流, 从功能上分,它是———流。

答:输入;字节;节点;

Question_13_4

4.(字节流)FileInputStream 有三个重载的 read 方法,其中:
I. 无参的read 方法返回值为 类型,表示
II.int read(byte[] bs)方法返回值表示 _____,参数表示__存储数据的数组 。
III.int read(byte[] bs, int offset, int len) 方法返回值表示 有效的数据个数 ,参数分别表示 存储数据的数组,起始位置,读取长度 、 。

  1. int;字节的ASCII码,如果已到末尾,返回-1
  2. 读入缓冲区有效的数据个数 ,如果因为已经到达文件末尾而没有更多的数据,则返回 -1;存储数据的缓冲区
  3. 读入缓冲区有效的数据个数 ,如果因为已经到达文件末尾而没有更多的数据,则返回 -1;存储数据的缓冲区、起始下标、读取长度

Question_13_5

5.(字节流)下面关于 FileInputStream 类型说法正确的是:
A.创建FileInputStream 对象是为了读取硬盘上的文件
B.创建FileInputStream 对象时,如果硬盘上对应的文件不存在,则抛出一个异常
C.利用FileInputStream 对象可以创建文件
D.FileInputStream 对象读取文件时,只能读取文本文件

答:AB

Question_13_6

6.(字节流)填空:
I.创建FileOutputStream 对象时,如果对应的文件在硬盘上不存在,则会 ;如果对应的文件在硬盘上已经存在,则
II.如果使用 FileOutputStream(String path, boolean append)构造方法创建 FileOutputStream 对象,并给定第二个参数为 true,则效果为 _______。 创 建 FileOutputStream 时 ___(会|不会)产生异常。

  1. 创建文件 ;直接打开
  2. 从文件尾写入;会

Question_13_7

7.代码改错

class TestFileInputStream{
   
	public static void main(String args[]){
   
		FileInput
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值