当前位置: 首页 > news >正文

file io(I)

目录

相对路径​编辑

文件操作​编辑

 删除​编辑

IO​编辑 IO读​编辑

Java IO流 与 Stream流 的区分与学习建议

一、核心概念区分

二、是否需要先学 Stream流 才能学 IO流?

三、不学 Stream流 会影响理解 IO流 吗?

四、学习建议

五、代码示例对比

六、总结

一次读多个

​编辑一次读完所有

​编辑string构造器

String(char[] value, int offset, int count)


相对路径

文件操作

 删除

IO IO读

Java IO流 与 Stream流 的区分与学习建议


一、核心概念区分
  1. Java IO流

    • 用途:处理输入输出操作,如文件读写、网络数据传输。
    • 分类
      • 字节流InputStream / OutputStream(如 FileInputStreamBufferedOutputStream)。
      • 字符流Reader / Writer(如 FileReaderBufferedWriter)。
    • 典型场景
      • 读取本地文件:FileInputStream + BufferedReader
      • 发送网络数据:Socket.getOutputStream()
  2. Java 8 Stream流

    • 用途:对集合(ListSet 等)进行函数式操作(过滤、映射、归约)。
    • 特点
      • 链式调用:list.stream().filter(...).map(...).collect(...)
      • 延迟执行:操作仅在终止方法(如 collect())调用时触发。
    • 典型场景
      • 筛选集合中的偶数:list.stream().filter(x -> x%2==0).collect(Collectors.toList())

二、是否需要先学 Stream流 才能学 IO流?

答案是否定的,二者无直接关联,学习顺序可独立安排。

对比维度IO流Stream流
核心目标数据传输(文件、网络)集合数据处理(函数式操作)
学习前提Java基础(异常处理、文件路径)Java基础 + Lambda表达式基础
是否需要先学对方不需要不需要

关键结论

  • 学习 IO流 不需要先掌握 Stream流
  • 学习 Stream流 也不需要先学 IO流

三、不学 Stream流 会影响理解 IO流 吗?

完全不影响,但需注意以下两点:

  1. 术语混淆

    • IO流的类名包含 Stream(如 InputStream),但和 Java 8 Stream 无关。
    • 避免误将 InputStream 理解为 Stream API 的流。
  2. 学习重点差异

    • IO流:关注字节/字符的读写、缓冲优化、资源关闭(try-with-resources)。
    • Stream流:关注集合操作的高效性和代码简洁性。

四、学习建议
  1. 初学者的学习路径

    • 先学 IO流:掌握文件读写、网络通信等基础技能。
    • 后学 Stream流:在熟悉集合操作后,提升代码简洁性。
  2. 核心学习内容

    • IO流重点
      • 字节流 vs 字符流的区别。
      • 装饰器模式(如 BufferedReader 包装 FileReader)。
      • 资源释放(close() 或 try-with-resources)。
    • Stream流重点
      • Lambda表达式与函数式接口。
      • 中间操作(filtermap)与终止操作(collectforEach)。

五、代码示例对比
  1. IO流示例(读取文件)

     

    Java

    try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); }
  2. Stream流示例(集合处理)

     

    Java

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList());

六、总结
  • IO流 和 Stream流 是 Java 中两个独立模块,学习顺序可自由安排
  • 不学 Stream流 对理解 IO流 无任何影响,但需注意术语差异。
  • 根据实际需求选择学习:
    • 需要文件/网络操作 → 优先学 IO流
    • 需要处理集合数据 → 优先学 Stream流
    • 一次读多个

    • 一次读完所有

    • string构造器

      在Java中,String 类有几个构造器,允许您以不同的方式创建 String 对象。以下是 String 类的一些常见构造器及其参数说明:

    • String()

      • 这是一个无参构造器,它创建一个空的 String 对象,不包含任何字符。

      java

      复制

      String str = new String();
      
    • String(char[] value)

      • 这个构造器接受一个字符数组作为参数,并创建一个包含该数组中所有字符的 String 对象。

      java

      复制

      char[] chars = {'H', 'e', 'l', 'l', 'o'};
      String str = new String(chars);
      
    • 这些构造器提供了不同的方式来创建 String 对象,根据您的具体需求选择合适的构造器。

    • String(char[] value, int offset, int count)

      • 这个构造器接受一个字符数组、一个起始偏移量(offset)和一个计数(count)作为参数。它创建一个包含从偏移量开始的 count 个字符的 String 对象。

      java

      复制

      char[] chars = {'H', 'e', 'l', 'l', 'o'};
      String str = new String(chars, 1, 4); // 创建 "ello"
      
    • String(byte[] bytes)

      • 这个构造器接受一个字节数组作为参数,并使用平台的默认字符集解码这些字节来创建一个 String 对象。

      java

      复制

      byte[] bytes = {72, 101, 108, 108, 111}; // ASCII 编码的 "Hello"
      String str = new String(bytes);
      
    • String(byte[] bytes, int offset, int length)

      • 这个构造器接受一个字节数组、一个起始偏移量(offset)和一个长度(length)作为参数。它使用平台的默认字符集解码从偏移量开始的 length 个字节来创建一个 String 对象。

      java

      复制

      byte[] bytes = {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100}; // ASCII 编码的 "Hello World"
      String str = new String(bytes, 6, 5); // 创建 "World"
      
    • String(byte[] bytes, int offset, int length, String charsetName)

      • 这个构造器接受一个字节数组、一个起始偏移量(offset)、一个长度(length)和一个字符集名称(charsetName)作为参数。它使用指定的字符集解码从偏移量开始的 length 个字节来创建一个 String 对象。

      java

      复制

      byte[] bytes = {206, 177, 206, 189, 206, 191, 206, 187, 206, 177}; // UTF-8 编码的 "Привет"
      String str = new String(bytes, 0, bytes.length, "UTF-8");
      
    • String(String original)

      • 这个构造器接受一个 String 对象作为参数,并创建一个新的 String 对象,它是 original 的一个副本。

      java

      复制

      String original = "Hello";
      String str = new String(original);
      

相关文章:

  • 数据类设计_图片类设计之8_自由图形类设计_(前端架构)
  • 云资源开发学习应用场景指南,场景 1 云上编程实践平台
  • 【Linux网络(五)】传输层协议
  • 说说MyBatis一、二级缓存和Spring一二级缓存有什么关系?
  • Vue Router动态改变路由参数的两种方法
  • 装饰器模式介绍和典型实现
  • k8s常用命令
  • js的闭包
  • linux 运行脚本命令区别
  • Pinecone数据库介绍、Milvus数据库介绍
  • 基于FastAPI与Kimi AI的智能聊天应用开发实践
  • 6. 使用VUE实现前端页面的分级嵌套
  • Spring Boot集成阿里云OSS:对象存储实战指南
  • 【学习】数字经济下数据价值化的内在逻辑与关键挑战
  • Vue的实例
  • SpringBoot整合Log4j2进行日志记录异步写入日志文件
  • 《深度剖析Android 12 SystemUI锁屏通知布局亮屏流程:从源码到实现》
  • 0323-B树、B+树
  • Mybatis-plus配置动态多数据源
  • Linux系统之yum本地仓库创建
  • 中山网站建设包括哪些/下载百度网盘
  • python手机版/衡水网站优化推广
  • 品牌网站建设完善大蝌蚪/网络推广的方式
  • 交友小程序开发/seo关键词排名系统
  • 网站建设费属于宣传费吗/网站功能开发
  • 外贸网站建设视频/武汉seo霸屏