• 【无标题】


    父类和子类

    以他的名称为后缀

    文件就是保存数据的地方

    流是经历的路径

    “江流”其实就算是一个路径

    输入与输出的过程

    输入,文件到内存

    输出,内存到文件

    如何获取文件的信息

    创建一级目录命令

    Mkdir()

    创建多级目录

    mkdirs()

    1. @Test
    2. publicvoidm3(){
    3. StringdirectoryPath="D:\\demo\\a\\b\\c";
    4. Filefile=newFile(directoryPath);
    5. if(file.exists()){
    6. System.out.println(directoryPath+"存在..");
    7. }else{
    8. if(file.mkdir()){
    9. System.out.println(directoryPath+"创建成功..");
    10. }else{
    11. System.out.println(directoryPath+"创建失败..");
    12. }
    13. }
    14. }

    这里跟linux直接结合了,跟linux的一模一样。

    其实就是API的调用

    Input 和 output

    处理数据传输

    文件读取

    放在java.io

    数据放在底层

    水流

    程序和内存

    字符流是按照字符为单位的

    (字符流的携带信息更多)

    二进制文件(声音、视频) 字节操作

    无损操作

    字符流(文本文件)更好

    不同的应用场景

    节点流、处理流、包装流

    类似于外卖小哥

    流是要被关闭的,流是一种资源

    如果不及时关闭,就会越来越积累地越多

    1. package com.hspedu.inputstream;
    2. import org.testng.annotations.Test;
    3. import java.io.FileInputStream;
    4. import java.io.IOException;
    5. /**
    6. * @author abner
    7. * @version 1.0
    8. *演示的使用(字节流入流 文件 》 程序)
    9. *
    10. *
    11. *
    12. */
    13. public class FileInputstream_ {
    14. public static void main(String[] args) {
    15. }
    16. @Test
    17. public void readFile01(){
    18. String filePath = "d:\\hello.txt";
    19. int readData = 0;
    20. //字节数组
    21. byte[] buf = new byte[8];//一次读取八个字符
    22. int readLength = 0;
    23. FileInputStream fileInputStream = null;
    24. //扩大作用域
    25. try{
    26. //创建FileInputstream对象,用于读取文件
    27. fileInputStream = new FileInputStream(filePath);
    28. //从该输入流读取一个字节的数据。如果没有输入可用,此方法将阻止。
    29. //如何返回-1,表示读取完毕
    30. while ((readLength = fileInputStream.read(buf)) != -1) {
    31. System.out.print(new String(buf, 0, readLength));//显示
    32. //如果读取正常,返回实际读取的字节数
    33. }}
    34. catch (IOException e) {
    35. e.printStackTrace();
    36. }
    37. finally{
    38. //关闭文件流,释放资源
    39. try {
    40. fileInputStream.close();
    41. } catch (IOException e) {
    42. e.printStackTrace();
    43. }
    44. }
    45. }}

    IO流里,输入输出分为4步:格式化/解析,缓冲,编码转换和传递。

    格式化/解析:在内部数据表示(以字节为单位)与外部数据表示(以字符为单位)之间进行双向转换。例如一个2字节的整数10002,就需要5个字符来表示。

    缓冲:用于在格式/解析与传递之间缓存字符序列。对于输出,较短的字符序列格式化之后并不马上输出,而是保存在缓冲区里,待累积到一定规模之后再传递到外部设备。相反,从外部设备读入的大量数据也是先放在缓冲区,然后逐步取出完成输入。默认时,IO流的输入输出都是经过缓冲的,也可以让IO流工作在无缓冲模式下。

    编码转换: 是将一种字符表达式转换成另一种字符表达式。如果格式化产生的字符表达式与外部字符表达式不同(输出时),或者外部表达式与IO流能解析的表达式不同(输入时),就必须进行编码转换。如多字节编码与宽字符编码之间的转换等。多数情况下并不需要进行编码转换。

    传递:主要是与外部设备进行通信。输出时,传递负责将经过格式化、缓冲即编码转换后的字符序列发送到外部设备;输入时,则负责将外部设备抽取数据,为其后进行的编码转换、缓冲及解析提供字符序列。

    组成结构

    编辑 播报

    IO流类库在不同平台的具体实现上,可能会有所变化,但从总体设计上来看,C++流库主要由两个流类层次组成:

    (1)以streambuf类为父类的类层次

    主要完成信息通过缓冲区的交换。派生层次如下:

    缓冲区:是一个队列数据结构,由一字符序列和两个指针组成,这两个指针分别指向字符要被插入或被取出的位置。

    streambuf类为所有的streambuf类层次对象设置了一个固定的内存缓冲区,动态划分为两部分:

    用做输入的取区,用取指针指示当前取字符位置。

    用做输出的存区,用存指针指示当前存字符位置。

    (2)以ios类为父类的类层次

    ios类及其派生类是在streambuf类实现的通过缓冲区的信息交换的基础上,进一步增加了各种格式化的输入/输出控制方法。它们为用户提供使用流类的接口,它们均有一个指向streambuf的指针。

    ios类有四个直接派生类:

    istream

    ostream

    fstreambase

    strstreambase

    这四种流作为流库中的基本流类。ios类的派生层次如下:

  • 相关阅读:
    【未解决】MyBatis-Plus切换数据源有时未生效
    Vue路由(vue-router)
    像游戏一样办公,赋能OA系统转型
    Unity - Shader Compiled Log
    公共WiFi有风险,使用请注意。
    4、nerf(pytorch)
    排序算法-冒泡排序(工具类)
    C++ list使用与模拟
    day54,ARM day1:计算机相关理论和ARM相关内容
    【Ubuntu18.04 重启后卡在[OK]界面的解决方案】
  • 原文地址:https://blog.csdn.net/m0_62574889/article/details/127775485