【零基础学java】(IO流进阶)

【零基础学java】(IO流进阶)



缓冲流

缓冲流种类


字节缓冲输入流:BufferedlnputStream
字节缓冲输出流:BufferedOutputStream
字符缓冲输入流:BufferedReader
字符缓冲输出流:BufferedWriter

传统写入:   写1字节 → 系统调用 → 磁盘I/O → 返回
缓冲流写入: 写1字节 → 存入缓冲区(内存操作) → ... → 缓冲区满 → 批量写入磁盘

我们从实际数字上来体会缓冲流的作用

为什么缓冲区的大小一般是8192字节而不是越大越好

注意

对于字符流提升不明显,对于字符缓冲流而言关键点是两个特有的方法(字符流底层自带缓冲区)
字符缓冲流两个特有的方法
字符缓冲输入流BufferedReader:readLine()
字符缓冲输出流BufferedWriter:newLine()

缓冲流的分类

字节缓冲流

方法名称说明
public BufferedInputStream(InputStream is)
把基本流包装成高级流,提高读取数据的性能
public BufferedoutputStream(OutputStream os)
把基本流包装成高级流,提高写出数据的性能
原理:底层自带了长度为8192的缓冲区提高性能

字节缓冲输入流

细节:这里的需求是拷贝,所以同时创建了输入输出流,但是关于IO流的创建,并不是看起来那么随意,而是随用随创建,有时创建的时机不正确可能会导致文件中数据清空,因为创建输出流时如果文件存在,会自动清空里面的数据,如果不存在会自动创建

字符缓冲输入流

字符缓冲输入流BufferedReader:readLine(),可以一次读取一整行
字符缓冲输出流BufferedWriter:newLine(),跨平台的换行,不同的系统

转换流

是字符流和字节流之间的桥梁

转换流的名字是
字符转换输入流:InputStreamReader
字符转换输出流:OutputStreamWriter
转换流的作用是
指定字符集读写数据(JDK11之后已淘汰)
字节流想要使用字符流中的方法了

序列化

序列化流的小细节

当要序列化多个对象时,我们可以把对象放到集合中,反序列化时更简洁

使用对象输出流将对象保存到文件时会出现NotSerializableException异常
解决方案:需要让Javabean类实现Serializable接口 。Serializable接口里面是没有抽象方法,标记型接口一旦实现了这个接口,那么就表示当前的Student类可以被序列化

反序列化

序列化流/反序列化流的细节汇总


使用序列化流将对象写到文件时,需要让Javabean类实现Serializable接口。
否则,会出现NotSerializableException异常


序列化流写到文件中的数据是不能修改的,一旦修改就无法再次读回来了

序列化流/反序列化流的细节汇总


①使用序列化流将对象写到文件时,需要让Javabean类实现Serializable接口。
否则,会出现NotSerializableException异常


②序列化流写到文件中的数据是不能修改的,一旦修改就无法再次读回来了


序列化对象后,修改了Javabean类,再次反序列化,会不会有问题?
会出问题,会抛出InvalidclassException异常
解决方案:给Javabean类添加serialversionUID(序列号、版本号)


④如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?
解决方案:给该成员变量加transient关键字修饰,
该关键字标记的成员变量不参与序列化过程

打印流

打印流
分类:打印流一般是指:PrintStream,PrintWriter两个类
特点1:打印流只操作文件目的地,不操作数据源
特点2:特有的写出方法可以实现,数据原样写出
例如:打印:97 文件中:97
特点3:特有的写出方法可以实现自动刷新,自动换行
打印一次数据=写出+换行+刷新

字节打印流

字符打印流

打印流与输出语句

//获取打印流的对象,此打印流在虚拟机启动的时候,由虚拟机创建,默认指向控制台
//特殊的打印流,系统中的标准输出流,是不能关闭,在系统中是唯一的。

压缩流

压缩本质:把每一个(文件/文件夹)看成ZipEntry对象放到压缩包中

Hutool

这里我们介绍一个工具包,大大提高了代码的书写效率

https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.8.16/hutool-all-5.8.16.jar

下载链接附上

之后我们导入库中,就可以使用了

使用时可以参考一下链接

官网:
https://hutool.cn/
API文档:
https://apidoc.gitee.com/dromara/hutool/
中文使用文档:
https://hutool.cn/docs/#/

Read more

Java 常见常用算法详解

Java 常见常用算法详解

目录 编辑 第一部分:开箱即用 — JDK 内置算法 1. 排序算法 (Sorting) 2. 搜索算法 (Searching) 3. 洗牌、填充与工具算法 第二部分:核心基础 — 需要掌握的经典算法 1. 排序与搜索基础 2. 递归与分治 (Recursion & Divide and Conquer) 3. 图算法 (Graph Algorithms) 4. 动态规划 (Dynamic Programming) 总结与实践建议         Java 作为一门工业级编程语言,其强大的标准库和生态系统内置了大量高效、稳定的算法。同时,理解并能够实现经典算法是程序员的核心能力。本文将从 “直接用” 和 “自己写” 两个维度,系统梳理 Java 开发中的常见算法。

By Ne0inhk
JDK 17 安装与配置指南(图文详解)

JDK 17 安装与配置指南(图文详解)

1. 开篇简介——长期支持与现代化Java开发 1.1 为什么选择JDK 17         JDK 17(Java Development Kit 17)是Oracle在2021年9月发布的长期支持版本(LTS, Long-Term Support),这意味着它将获得至少8年的官方维护与安全更新,直到2029年甚至更久。对于企业级应用和开发者来说,LTS版本意味着更高的稳定性、安全性和长期可维护性,使其成为生产环境的理想选择。         相较于非LTS版本(如JDK 18、19等),JDK 17不仅提供了关键的安全补丁和性能优化,还引入了许多现代化语言特性和API增强,帮助开发者编写更简洁、更高效的代码。         目前SpringBoot的最低支持版本是jdk17 1.2 适用人群 * Java初学者:JDK 17 提供了更直观、更现代化的语法,降低了学习门槛。 * 需要升级环境的开发者:从JDK 8/11迁移?JDK 17 是当前最稳定、最先进的LTS版本。

By Ne0inhk
AWT 布局管理器:Java 图形界面编程的核心

AWT 布局管理器:Java 图形界面编程的核心

前言 Java 的图形界面编程中,AWT(Abstract Window Toolkit)是最早的图形用户界面框架之一。它为开发人员提供了一些基本的组件和工具,用于构建窗口、按钮、文本框、标签等图形界面元素。而布局管理器(Layout Manager)则是 AWT 的重要组成部分,它决定了这些界面元素在容器中的布局方式。布局管理器通过自动调整组件的大小和位置,简化了界面设计,避免了手动计算和调整组件位置的繁琐工作。 本文将深入探讨 AWT 布局管理器的种类、工作原理以及如何在 Java 图形界面应用中使用它们。 一、什么是布局管理器? 布局管理器是 Java 中的一种机制,用于自动管理容器中组件的位置和尺寸。在没有布局管理器的情况下,开发人员需要手动设置组件的位置、大小和其他属性,这样的方式既繁琐又容易出错。而布局管理器可以根据不同的策略自动计算和调整组件的大小和位置,使得界面布局更加灵活和响应式。 二、常见的 AWT 布局管理器 1. FlowLayout(流式布局) FlowLayout 是

By Ne0inhk

开发智能体,用Python还是Java?

在开发 AI智能体应用(Agent-based AI Applications)时,Python 与 Java 技术栈的选择并非简单的“二选一”,而是 高度依赖场景、团队能力、系统边界和长期演进需求。以下是基于 2025年技术生态 的深度对比与决策指南(结合最新行业实践): 一、核心能力对比:Python vs Java 在智能体开发中的定位 维度Python 技术栈Java 技术栈关键结论AI/ML 原生支持⭐⭐⭐⭐⭐ • PyTorch/TensorFlow 官方首选 • LangChain/AutoGen/AgentScope 核心支持语言 • 90%+ 智能体论文代码基于 Python⭐⭐ • 依赖封装库(如 DJL、Tribuo) • 智能体框架多为社区移植版(功能滞后) • 无主流框架的一等公民支持Python 统治 AI 基础层企业级系统集成⭐

By Ne0inhk