JavaSe基础2023年2月06日学习内容

JavaSe-2023-2-06 IO流、输出、输入、字符流、字节流、序列化和反序列化、RandomAccessFile类

每日一句: 每个人都有梦想。但不同的是:有的人只梦,有的人敢想

学习内容:IO流、输出、输入、字符流、字节流、序列化和反序列化、RandomAccessFile类

  • IO流

    • I :input 输入 O: Output 输出
    • 通过IO流可以完成对硬盘的读写操作
    • IO流的分类:
      • 以内存为参照物
        • 往内存中去叫做输入,或者叫读
        • 从内存中出来叫做输出,或者叫写
      • 有的流是按照字节的方式读取数据,一次读取一个字节byte,等同于读取8个二进制位,这种流是万能的,什么类型都可以读取,包括文本、图片、视频、声音文件
    • 流的四大家族
      • java.io.InputStream 字节输入流
      • java.io.OutputStream 字节输出流
      • java.io.Reader 字符输入流
      • java.io.Writer 字符输出流
      • 注意:在java中以Stream结尾的都是字节流 、 以"Reader/Writer"结尾的都是字符流
      • 所有的流都实现了Closeable接口都可以关闭的 close()
      • 所有的流都实现了Flushable接口,都可刷新的 flush()
  • 字节流

    • 输入流

      • FileInputStream类主要用于从输入流中以字节流的方式读取图像数据等

        • new FileInputStream(File)

        • new FileInputStream(String path)

        • 以单个字节为单位进行拷贝,也就是每次读取一个字节后再写入一个字节
          • 缺点:文件稍大时,拷贝的效率很低
        • 准备一个和文件大小一样的缓冲区,一次性将文件中的所有内容取出到缓冲区然后一次性写入进去
          • 缺点:若文件过大时,无法申请和文件大小一样的缓冲区,真实物理内存不足。
        • 准备一个相对适当的缓冲区,分多次将文件拷贝完成
          •  FileInputStream fis = new FileInputStream("resource\\day02.txt");
             FileOutputStream fos = new FileOutputStream("resource\\day02_copy.txt");
                int len = 0;
                    byte[] data = new byte[10*1024];
                    long start = System.currentTimeMillis();
                     while((len = fis.read(data)) != -1){
                        System.out.println(len);
                        //按照实际的长度去写入
                        fos.write(data,0,len);
                    }
                    long end = System.currentTimeMillis();
                    System.out.println(start - end);
            //        关闭流
                    fos.close();
                    fis.close();
            
    • 输出流

      • FileOutputStream 类主要用于将图像数据之类的原始字节流写入到输出流中
        • new FileOutputStream(File,boolean append)
        • new FileOutputStream(String path,boolean append)
  • 字符流

    • 输入流

      • FileReader:不能指定编码 类主要用于从文本文件读取文本数据内容

        • new FileReader(File)
        • new FileReader(String path);
      • InputStreamReader类主要用于实现从字节流到字符流的转换 转换流

        • new InputStreamReader(InputStream in)

        • new InputStreamReader(InputStream,String charsetName))

        •  //如果遇到需要指定编码集
                  //使用InputStreamReader
          //        FileReader fr = new FileReader();//只能按照平台编码集读取
                  FileInputStream fis = new FileInputStream("resource\\abc.txt");
                  InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
          
      • BufferedReader类主要用于从输入流中读取单个字符、字符数组以及字符串 提高文本读取效率

        • new BUfferedReader(FileReader/InputStreamReader)

        •  public static void main(String[] args) throws IOException {
                  BufferedReader reader = new BufferedReader(new FileReader("resource\\abc.txt"));
                  String line;
                  while((line = reader.readLine()) != null){
                      System.out.println(line);
                  }
                  reader.close();
              }
          
    • 输出流

      • FileWriter类主要是用于将文本内容写入到文本文件
        • new FileWriter(File)
        • new FileWriter(String path)
      • OutputStreamWriter类主要用于实现从字符流到字节流的转换 转换流
        • new OutputStreamWriter(OutputStream in)
        • new OutputStreamWriter(OutputStream in,String charsetName));
    • 缓冲流

      • BufferedWriter类主要用于写入单个字符,字符数组以及字符串到输出流中
        • new BufferedWriter(Writer in)
    • 特定功能流

      • 读写二进制

        • DataInputStream(FIS)类主要用于从输出流中读取基本数据类型的数据

        • DataOutputStream(FOS)类主要用于以适当的方式将基本数据类型写入输出流中

        •  DataInputStream dis = new DataInputStream(new FileInputStream("E:\\cj.png"));
           DataOutputStream dos = new DataOutputStream(new FileOutputStream("D:\\cj_copy.png"));
                  int len;
                  while((len = dis.read()) != -1){
                      dos.write(len);
                  }
                  dos.close();
                  dis.close();
          
  • 序列化和反序列化

    • 序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialUID与本地相应实体类的serialUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常(InvalidCastException)
    • ObjectOutputStream(FOS)类主要用于将一个对象的所有内容整体写入到输出流中
    • ObjectInputStream(FIS)类主要用于从输入流中一次性将对象整体读取出来
  • RandomAccessFile类

    • RandomAccessFile类主要支持对随机访问文件的读写操作

    • 方法声明功能介绍
      RandomAccessFile(String name , String mode)根据参数指定的名称和模式构造对象
      r:以只读的方式打开
      rw:打开以便读取和写入
      rwd:打开以便读取和写入,同步文件内容的更新
      rws:打开以便读取和写入,同步文件内容和元数据的更新
      int read()读取单个字节的数据
      void seek(long pos)用于设置从此文件的开头开始测量的文件指针偏移量
      void write(int b)将参数指定的单个字节写入
      void close()用于关闭流并释放有关的资源
  • 新手上路,以上内容仅供参考,如有不对的地方,望指出!

  • gitee代码仓库地址:https://gitee.com/Zhengsenbing/java-se-basic

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值