理解字符流和字节流,节点流和处理流、缓冲流、InputStreamReader、BufferInputStream、BufferReader...

DAY10.2 Java核心基础

IO流

字符流和字节流

字符流和字节流在每次处理数据的单位不同,一个是字符,一个是字节

如果复制文件类型是文本类型,字节流字符流都可以

如果复制的文件类型是非文本类型,则只能使用字节流,使用字符流会导致文件不可用

public static void main(String[] args) throws IOException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\img.png");FileReader fileReader = new FileReader(file1);FileWriter fileWriter = new FileWriter("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\img2.png");int temp = 0;while ((temp = fileReader.read()) != -1) {fileWriter.write(temp);}fileWriter.close();fileReader.close();
}

image-20250311160402691

用字符流复制文件导致文件受损不可用,打开文件失败

但是字节流就可以完美复制,因为字节流每次操作的最小数据,什么数据格式都可以复制

public static void main(String[] args) throws IOException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\img.png");File file2 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\img2.png");InputStream inputStream = new FileInputStream(file1);OutputStream outputStream = new FileOutputStream(file2);int temp = 0;while ((temp = inputStream.read()) != -1) {outputStream.write(temp);}inputStream.close();outputStream.close();
}

处理流

字节流是基础管道,字符流是在字节流基础上转化而来的

Java提供了完成转化的类,按照输入和输出两个方向分为输入转化流(InputStreamReader)和输出转化流(OutputStreamWriter)

InputStreamReader

public static void main(String[] args) throws IOException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\test3.txt");InputStream inputStream = new FileInputStream(file1);InputStreamReader inputStreamReader = new InputStreamReader(inputStream);int i;int num = 0;while ((i=inputStreamReader.read())!=-1){System.out.println(i);num++;}inputStreamReader.close();System.out.println(num);
}

InputStreamReader是Reader的子类,所以它是一个字符输入流

OutputStreamWriter

public static void main(String[] args) throws IOException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\test3.txt");OutputStream outputStream = new FileOutputStream(file1);OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);outputStreamWriter.write("今天天气怎么样");outputStreamWriter.flush();outputStreamWriter.close();
}

OutputStreamWriter是Writer的子类,所以它是一个字符输出流

缓冲流

为了减少对硬盘的资源开销,引入的缓冲流,自带缓冲区,可以一次性读取硬盘的部分输出存入缓冲区,再写入内存中

缓冲流属于处理流,不能直接关联文件操作,只能对已存在的节点流进行操作

如何区分节点流和处理流?

  • 节点流:可以关联文件创建,有个构造函数传递file文件类进行创建
  • 处理流:不能直接关联文件创建,不能通过构造函数传递file文件类进行创建

缓冲流又可以分为:

  • 字节缓冲流:字节输入缓冲流、字节输出缓冲流
  • 字符缓冲流:字符输入缓冲流、字符输出缓冲流

字节输入缓冲流(BufferInputStream)

public static void main(String[] args) throws IOException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\test3.txt");BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file1));while (bufferedInputStream.available() != 0){System.out.println(bufferedInputStream.read());}
}

字节输出缓存流(BufferedInputStream)

public static void main(String[] args) throws IOException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\test3.txt");BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file1));String content ="JDK(Java Development Kit)称为Java开发包或Java开发工具,\r\n是一个编写Java应用程序的开发环境";bufferedOutputStream.write(content.getBytes());bufferedOutputStream.flush();bufferedOutputStream.close();
}

字符输入缓存流(BufferReader),很好用,可以读取一行的数据

文件内容:

image-20250311232124705

    public static void main(String[] args) throws IOException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\test3.txt");BufferedReader br = new BufferedReader(new FileReader(file1));
//        String line;
//        int count = 0;
//        while ((line = br.readLine()) != null) {
//            System.out.println(line);
//            count++;
//        }
//        System.out.println(count);int temp;while ((temp = br.read()) != -1) {System.out.println(temp);}}

输出:

image-20250311232139766

可以看见44为逗号,13和10代表换行符 \n

中文字符需要的长度长一点,1个中文字符需要3个字节,这样每一个字符读取比字节读取效率更高,但是我们还有更加高效的方法

readLine() 方法

public static void main(String[] args) throws IOException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\test3.txt");BufferedReader br = new BufferedReader(new FileReader(file1));String line;int count = 0;while ((line = br.readLine()) != null) {System.out.println(line);count++;}System.out.println(count);
}

输出:

image-20250311232413420

BufferedReader有一个读取每行的方法,更加高效简洁

字符输出缓冲流(BufferedWriter )

BufferedWriter 提供了一个可以直接将字符串输出的方法 write(String str)

public static void main(String[] args) throws IOException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\test3.txt");BufferedWriter bw = new BufferedWriter(new FileWriter(file1));String content = "JDK(Java Development Kit)称为Java开发包或Java开发工具,\r\n是一个编写Java应用程序的开发环境";bw.write(content);bw.flush();bw.close();
}

序列化和反序列化

将文件读取到内存中,以 byte、数组、char、String 类型展示的,同理我们也可以将内存中的数字或者字符串数据输出到文件中

如果我们需要将内存中的对象输出到文件中,或者从文件中读取数据并还原成内存中的对象,如何处理?

  • 序列化:将内存中的对象输出到硬盘文件中进行保存

需要序列化的User类,必须实现Serializable接口

public class User implements Serializable {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}

测试接口:

public static void main(String[] args) throws IOException, ClassNotFoundException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\test3.txt");User user = new User("张三", 18);ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file1));objectOutputStream.writeObject(user);objectOutputStream.flush();objectOutputStream.close();
}

写入到文件:

image-20250311234654154

  • 反序列化:从文件中读取数据并还原成内存中的对象
public static void main(String[] args) throws IOException, ClassNotFoundException {File file1 = new File("H:\\JavaCode\\src\\main\\java\\com\\deepSeek\\shuwu\\Day10\\test3.txt");User user = new User("张三", 18);ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file1));Object o = objectInputStream.readObject();User user1 = (User) o;System.out.println(user1);objectInputStream.close();
}

输出:

image-20250311234819982

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31796.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泄露测试仪CTS的Sentinel I28使用

前言:本文档主要讨论CTS Sentinel I28的使用方法,设备图片如下: 具体文档可从下面链接下载: https://download.csdn.net/download/qq_34047402/90471262 泄露测试仪CTS的SentinelI28使用资源-CSDN文库 [注意] 调压方式,若选择机械式调压,那么测试的压力值只能有1个,…

YOLOv11融合[CVPR205]SCSegamba中的GBC结构

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《SCSegamba: Lightweight Structure-Aware Vision Mamba for Crack Segmentation in Structures》 一、 模块介绍 论文链接:https://arxi…

C++蓝桥杯皮亚诺曲线距离求解

C蓝桥杯皮亚诺曲线距离求解 一、题目概述二、解题分析2.1解题思路2.2k值范围限制 三、实现代码四、代码测试4.1蓝桥杯测试平台4.2直接传入原始输入的k值4.3限制k值大小4.4pow函数求整数高次幂存在误差4.5满分代码 附录error: ‘long long int y1’ redeclared as different kin…

uni-app+vue3学习随笔

目录相关 static文件 编译器会把static目录中的内容整体复制到最终编译包内, 非 static 目录下的文件(vue组件、js、css 等)只有被引用时,才会被打包编译。 css、less/scss 等资源不要放在 static 目录下,建议这些…

为什么大模型网站使用 SSE 而不是 WebSocket?

在大模型网站(如 ChatGPT、Claude、Gemini 等)中,前端通常使用 EventSource(Server-Sent Events, SSE) 来与后端对接,而不是 WebSocket。这是因为 SSE 更适合类似流式文本生成的场景。下面我们详细对比 SSE…

【2025】基于python+django的考研自习室预约系统(源码、万字文档、图文修改、调试答疑)

考研自习室预约系统通过 Python Django 技术栈的深度整合,为考研学生和自习室管理者打造了一个高效、便捷、智能的自习室预约管理平台。系统不仅满足了学生便捷预约自习室的需求,提升了备考效率,还帮助管理者实现了自习室资源的科学管理和优…

Flutter中stream学习

Flutter中stream学习 概述Stream的基础概念stream的常用方法Stream.fromFuture(Future<T> future)Stream.fromFutures(Iterable<Future<T>> futures)Stream.fromIterable(Iterable<T> elements)Stream.periodic(Duration period, [T computation(int c…

计算机网络:计算机网络的组成和功能

计算机网络的组成&#xff1a; 计算机网络的工作方式&#xff1a; 计算机网络的逻辑功能; 总结&#xff1a; 计算机网络的功能&#xff1a; 1.数据通信 2.资源共享 3.分布式处理:计算机网络的分布式处理是指将计算任务分散到网络中的多个节点&#xff08;计算机或设备&…

【redis】五种数据类型和编码方式

文章目录 五种数据类型编码方式stringhashlistsetzset查询内部编码 五种数据类型 字符串&#xff1a;Java 中的 String哈希&#xff1a;Java 中的 HashMap列表&#xff1a;Java 中的 List集合&#xff1a;Java 中的 Set有序集合&#xff1a;除了存 member 之外&#xff0c;还有…

AI与现有运维管理软件之间的相互影响和协同发展

AI与现有运维软件之间的相互影响和协同发展。我们可以从几个角度来探讨&#xff1a; 1. AI与运维软件的共生关系 已有运维软件作为大模型的一部分&#xff1a;运维软件&#xff08;如监控易&#xff09;在长期运行中积累了大量的数据和经验&#xff0c;这些数据和经验可以被用来…

深度评测DeepSeek、ChatGPT O1和谷歌Gemini AI应用开发场景 - DeepSeek性能完胜!

下面我会展示我为期一周的实验结果&#xff0c;创作不宜&#xff0c;希望大家关注我&#xff0c;以后多多互3&#xff01;前一阵我在互联网上看到很多关于DeepSeek R1的讨论&#xff0c;这个开源模型据说可以媲美&#xff0c;甚至优于像OpenAI o1这样的付费模型。 由于我在日常…

使用DeepSeek+蓝耘快速设计网页简易版《我的世界》小游戏

前言&#xff1a;如今&#xff0c;借助先进的人工智能模型与便捷的云平台&#xff0c;即便是新手开发者&#xff0c;也能开启创意游戏的设计之旅。DeepSeek 作为前沿的人工智能模型&#xff0c;具备强大的功能与潜力&#xff0c;而蓝耘智算云平台则为其提供了稳定高效的运行环境…

Hcaptcha验证码自动识别方案详解

Hcaptcha验证系统简介 这个令人头疼的验证系统长这样: 还有这样: 看着就让人不开心,每次都要玩这种小游戏。 工作原理 1. 环境评估(形式主义阶段) 它会检查这些东西: 浏览器指纹行为数据IP地址网站设置 如果你看起来像个"正常访客",它可能就放你过。但要是发现…

SpringBoot事务管理

Spring事务管理 在日常开发过程中&#xff0c;只要涉及数据操作&#xff0c;都不可避免地会涉及事务管理相关内容&#xff0c;而Spring提供了强大的事务管理机制&#xff0c;能够帮助开发者更轻松地处理数据一致性和事务的问题。 一、什么是事务管理 事务&#xff08;Transa…

JU TPS研究笔记

这个模板的Cover Demo和尘白禁区一样&#xff0c;是自由观察和背后锁定视角可切换的TPS。这种模式比单独做自由观察或背后锁定都要复杂。在非瞄准也就是自由观察状态&#xff0c;鼠标控制相机转动&#xff0c;WASD控制人物以相机前方为前方一边移动一边平滑旋转到面对移动方向。…

[NewStarCTF 2023 公开赛道]ez_sql1 【sqlmap使用/大小写绕过】

题目&#xff1a; 发现id处可以sql注入&#xff1a; 虽然输入id1;show databases;#没什么回显&#xff0c;但是知道这里是字符型注入了 这次利用sqlmap注入 --dbs&#xff1a;列出所有数据库名字 python .\sqlmap.py -u http://a40b2f0a-823f-4c99-b43c-08b94ed0abb2.node5.…

DeepSeek-实用集成大礼包

随着DeepSeek的持续火热,在各种平台看到大家基于deepseek+各类应用的案例。这些案例真假难辨,现在DeepSeek已经推出了官方的Awesome DeepSeek Integrations,集成了各类应用,下面是详细的介绍。 DeepSeek Integrations 是 DeepSeek 官方在 GitHub 上精心整理的一个集合了各种…

Ubuntu安装问题汇总

参考文章&#xff1a; 【Ubuntu常用快捷键总结】 【王道Python常用软件安装指引】 1. 无法连接虚拟设备 sat0:0 【问题】&#xff1a;出现下图所示弹框。 【问题解决】&#xff1a; 点击 “否” 。 点击左上角的 “虚拟机” → “设置…” → “CD/DVD (SATA)” &#xff0c;…

深陷帕金森困境,怎样重燃生活信心?

帕金森&#xff0c;这个悄然影响无数中老年人生活的神经系统疾病&#xff0c;正逐渐走进大众视野。患病后&#xff0c;患者常出现静止性震颤&#xff0c;安静时手部、下肢不自主抖动&#xff0c;如同在默默诉说着身体的异常。肢体变得僵硬&#xff0c;行动迟缓&#xff0c;起步…

空间遥感智能处理技术发展现状与趋势

在数字化时代&#xff0c;空间遥感技术已经成为获取地球表面信息的重要手段。随着卫星遥感技术的快速发展&#xff0c;获取的遥感数据量激增&#xff0c;这对遥感数据的智能处理提出了更高的要求。本文将探讨空间遥感智能处理技术的发展现状与未来趋势。 发展现状 大数据与人工…