JAVA_18
JAVA_18
- 1.IO流
- 2.JAVA_IO流
- 3.标准输入输出
- 4.对象序列化
- 5.字符编码与字符集
- 6.异常处理和资源关闭
1.IO流
- IO流(Input/Output stream)是用于在程序和外部设备(如文件、网络等)之间进行数据传输的机制。它是Java中处理输入和输出操作的一种抽象方式。
- 概念:
输入流(Input Stream):用于从外部设备(如文件、网络等)读取数据到程序中的
流。
输出流(Output Stream):用于将程序中的数据写入外部设备(如文件、网络等)的流。 - 作用:
通过使用IO流,程序可以与外部环境进行数据交换,从而实现数据的读取和写入。
IO流提供了一种统一的方式来处理不同类型的数据源和目标,使得程序的编写更加灵活和可扩展。
IO流可以处理各种不同类型的数据,包括文本、二进制、对象等。
IO流提供了一些高级功能,如缓冲、字符编码转换、对象序列化等,使数据传输更高效、安全和可靠。 - 在Java中,IO流分为字节流和字符流两种类型。
字节流:字节流以字节为单位进行数据传输。它们适用于处理二进制数据(如图像、音频等)或与外部设备进行底层交互(如读写文件、网络通信)。
字符流:字符流以字符为单位进行数据传输。它们适用于处理文本数据,提供了更方便的字符处理方法,可以自动进行字符编码转换。 - Java提供了一组I0流类来处理不同的输入和输出需求,例如:
字节流:InputStream、OutputStream、FilelnputStream、FileOutputStream等。
字符流:Reader、Writer、FileReader、FileWriter等。 - 通过使用这些类,可以实现从文件读取数据、向文件写入数据、与网络进行数据交互等操作。
总而言之,IO流在Java中扮演着重要的角色,它们提供了一种方便、灵活和可靠的方式来处理输入和输出操作,使得Java程序可以与外部环境进行数据交换和通信。
2.JAVA_IO流
- 在Java中,IO流根据数据的类型进行分类,主要分为字节流(ByteStreams)和字符流(Character Streams)。
字节流(Byte Streams):字节输入流(InputStream):用于从数据源(如文件、网络)读取字节数据。它以字节为单位进行读取,适用于处理二进制数据(如图像、音频等)或与底层设备进行交瓦。
字节输出流(OutputStream):用于将字节数据写入目标(如文件、网络)。它以字节为单位进行写入,适用于向文件或网络发送二进制数据。@字符流(Character Streams):
字符输入流(Reader):用于从数据源读取字符数据,并提供字符处理的能力。它
以字符为单位进行读取,适用于处理文本数据。
字符输出流(Writer):用于将字符数据写入目标,并提供字符处理的能力。它以字符为单位进行写入,适用于向文件或网络发送文本数据。
字节流和字符流的区别在于处理的数据类型和提供的功能。字节流以字节为单位进行读取和写入,适用于处理二进制数据和底层设备交豆。字符流以字符为单位进行读取和写入,提供了更方便的字符处理方法,适用于处理文本数据。
在使用IO流时需要根据数据的特性选择合适的流类型。如果处理的是二进制数据,如图像或音频文件,则使用字节流。如果处理的是文本数据,如读取文本文件或与用户交互,则使用字符流。
Java提供了一系列字节流和字符流的类,如FilelnputStream、FileOutputStream、FileReader、FileWriter等,开发者可以根据需求选择合适的流类进行数据的读取和写入操作。此外,还可以通过转换流(如InputStreamReader和OutputStreamWriter)在字节流和字符流之间进行转换。
2. 字节流与字符流
InputStream和OutputStream是Java中用于处理字节流的抽象类。它们提供了一组用于读取和写入字节数据的方法。下面详细介绍这两个类的使用:
① InputStream类:
InputStream是抽象类,不能直接实例化,但有许多具体的子类可用。
常见的InputStream子类包括FileInputStream(从文件读取)ByteArrayInputStream(从字节数组读取)、SocketlnputStream(从网络套接字读取)等。
通过调用子类的构造函数,可以创建相应的InputStream对象。Inputstream提供了以下常用方法:
int read():从流中读取一个字节数据,并返回读取的字节值(0-255),若已到达流的未尾,则返回-1。
intreadlbyte[] bufen) :从流中最多读取buffer长度的字节数据,并将其存储到给定的字节数组中,返回实际读取的字节数。
void close0 :关闭流并释放相关的系统资源。
② OutputStream类:
OutputStream也是抽象类,不能直接实例化,但有多个具体的子类可用。
常见的OutputStream子类包括FileOutputStream(写入文件)ByteArrayOutputStream(写入字节数组)SocketOutputStream(写入网络套接字)等。
通过调用子类的构造函数,可以创建相应的OutputStream对象。
OutputStream提供了以下常用方法
void write(intb):将指定的字节写入流中。
void write(byteūbufer):将给定字节数组中的数据写入流中。
void close(): 关闭流并释放相关的系统资源。
void nush0: 刷新流,将缓冲区中的数据立即写入目标。
请注意,在使用InputStream和OutputStream时,需要正确处理I0异常并在不再需要流时及时关闭流以释放资源。为了确保流的自动关闭,可以使用Java 7引入的try-with-resources语句,它会自动处理资源的关闭操作。
3. Reader和Writer类的功能和用法
Reader和Writer是]ava中用于处理字符流的抽象类。它们提供了一组用于读取和写入字符数据的方法。下面详细介绍这两个类的功能和用法
① Reader类:
Reader是抽象类,不能直接实例化,但有多个具体的子类可用。
常见的Reader子类包括FileReader(从文件读取字符数据)、StringReader(从字符串读取字符数据)、BufferedReader(提供缓冲功能)、InputStreamReader(将字节流转换为字符流)等。
通过调用子类的构造函数,可以创建相应的Reader对象。
Reader提供了以下常用方法:
int read():从流中读取一个字符,并返回读取的字符的Unicode值,若已到达流的末尾,则返回-1。
int read(char[] bufen):从流中最多读取buffer长度的字符数据,并将其存储到给定的字符数组中,返回实际读取的字符数。
void close():关闭流并释放相关的系统资源,
② Writer类:
Writer也是抽象类,不能直接实例化,但有多个具体的子类可用。
常见的Writer子类包括FileWriter(写入文件)、StringWriter(写入字符串)、BufferedWriter(提供缓冲功能)、OutputStreamWriter(将字节流转换为字符流)等。
通过调用子类的构造函数,可以创建相应的Writer对象。
Writer提供了以下常用方法:
void write(int c):将指定的字符写入流中。
void write(char[] buffer):将给定字符数组中的数据写入流中
void write(String data):将给定字符串写入流中。
void close():关闭流并释放相关的系统资源。
void flush():刷新流,将缓冲区中的数据立即写入目标。
同样地,在使用Reader和Writer时,需要正确处理I0异常并在不再需要流时及时关闭流以释放资源。也可以使用try-with-resources语句来自动关闭流。
值得注意的是,Reader和Writer处理的是字符数据,因此适用于处理文本文件或与用户交互的场景,而不适用于处理二进制数据。如果需要处理二进制数据,请使用InputStream和OutputStream类。
3. 文件读写
在Java中,可以使用File类来创建和删除文件。
BufferedInputStream和BufferedOutputStream类的优势
BufferedInputStream和BufferedOutputStream是Java中用于提供缓冲功能的流类,它们是对InputStream和OutputStream的包装。它们具有以下优势:
① 提高读写效率:BufferedInputStream和BufferedOutputStream使用内部缓冲区,可以减少与底层输入输出流的直接交互次数,从而提高读写效率。相对于直接使用底层流,使用缓冲流可以减少对底层存储设备的频繁访问,减少读写操作的开销。
② 减少系统调用次数:缓冲流在底层流的基础上引入了缓冲区,可以一次性读取或写入较大的数据块。这减少了底层系统调用的次数,降低了系统开销,提高了读写性能。
③ 自动缓冲处理:BufferedlnputStream和BufferedOutputStream类自动处理数据的缓冲,无需手动管理缓冲区。它们提供了一组读写方法,将数据从底层流读入缓冲区或将数据从缓冲区写入底层流,开发者无需手动编写循环读取和写入的代码。
④ 适用于文本和二进制数据:缓冲流既适用于处理文本数据,也适用于处理二进制数据。无论是读取或写入文本文件,还是读取或写入二进制文件(如图像、音频文件),都可以使用缓冲流来提高读写效率。
3.标准输入输出
- System.in和System.out是]ava中的标准输入流和标准输出流,它们提供了与命令行界面进行交互的功能。
System.in:
System.in是标准输入流,用于从控制台(通常是命令行界面)读取用户的输入。
System.in是一个InputStream对象,可以使用InputStream的方法来读取用户的输入。
通过System.in,程序可以等待用户的输入,并将输入的数据用于程序的处理。
System.out:
System.out是标准输出流,用于向控制台输出程序的结果、提示信息等
System.out是一个PrintStream对象,可以使用PrintStream的方法将数据输出到控制台。
通过System.out,程序可以将结果、信息等输出到控制台,以供用户观看.
使用Scanner类可以方便地从标准输入(如控制台)获取用户的输入。
4.对象序列化
Serializable接口的作用:
Serializable接口是]ava中的一个标记接口(MarkerInterface),它没有定义任何方法,只是作为一个标识,用于表朗类的对象可以被序列化和反序列化。
序列化是将对象转换为字节序列,以便在网络传输或将对象存储到文件系统中。而反序列化则是将字节序列恢复为对象。
Serializable接口的作用如下:
① 对象持久化:通过实现Serializable接口,可以使类的对象可以被序列化,即可以将其保存到文件、数据库等持久化存储介质中。这样,在程序终止后,对象的状态可以被保留下来,下次程序运行时可以重新加载对象。
② 网络通信:在网络通信中,将对象序列化后发送给其他计算机,接收方可以将字节流反序列化为对象。这样可以方便地进行分布式计算、远程方法调用等操作。
③ 分布式系统:在分布式系统中,各个节点之间需要传递数据和对象,通过序列化和反序列化,可以在不同的节点间传输和共享对象。
④ 对象深拷贝:通过将对象序列化然后再反序列化,可以实现对象的深拷贝,即创建一个全新的对象,与原对象完全独立。
要实现Serializable接口,只需在类的声明上加上mmdlemenrs senaleo,并且不需要实现任何方法。需要注意的是,被序列化的类的所有非瞬态(ansient)字段都会被序列化,因此应谨慎选择需要序列化的字段
需要注意的是,Serializable接口并不建议用于敏感数据、密码、安全密钥等信息的序列化,因为序列化的数据可以在网络上传输或存储在不受信任的环境中。在这种情况下,应考虑其他安全手段,如加密、签名等来保护数据的安全性。
总而言之,Serializable接口为Java对象的序列化和反序列化提供了支持,使对象在持久化、网络通信和分布式系统中的传输和共享更加便捷。
使用0bjectOutputstream和ObjectlnputStream类可以对Java对象进行序列化和反序列化。
5.字符编码与字符集
- 字符编码的概念和重要性
字符编码是一种将字符映射为二进制数据的规则或方案。它定义了字符与二进制数据之间的对应关系,使计算机能够处理和存储文本数据。字符编码在计算机系统中起着重要的作用。
概念:
字符集(Character Set):字符集是一组字符的集合,每个字符都有一个唯一的标识符。常见的字符集包括ASCI1、Unicode等
编码方案(EncodingScheme):编码方案定义了字符集中的字符如何映射为二进制数据。它规定了字符的表示形式和编码方式。
重要性:
文本处理:字符编码使得计算机能够处理和表示文本数据。通过字符编码,可以在计算机中存储、传输和处理各种语言的文本,包括英语、中文、日语等。不同的字符编码方案支持不同的字符集和语言。
兼容性和互操作性:字符编码的标准化有助于实现不同计算机系统、操作系统和应用程序之间的兼容性和互操作性。统一的字符编码方案使得文本数据可以在不同的环境中无缝传递和处理。
多语言支持:Unicode是一种广泛使用的字符编码标准,它支持几乎所有的语言和符号。Unicode的出现解决了传统字符编码方案的局限性,使得多语言文本处理变得更加便捷。
国际化和本地化:字符编码对于实现软件的国际化和本地化非常重要。通过选择适当的字符编码,软件可以适应不同语言和地区的需求,支持多语言界面、本地化的日期、时间和数字格式等。
常见的字符编码方案包括ASCI、UTF-8、UTF-16、GBK、ISO-8859-1等。选择合适的字符编码方案要考虑数据的特点、传输和存储需求、目标环境等因素。在处理文本数据时,确保正确的字符编码非常重要,否则可能导致乱码、字符丢失或无法正确解析文本。
当需要处理不同字符编码方式的文本时,可以使用Java中的InputstreamReader 和Outputstreamwriter 类来进行转换和处理。
6.异常处理和资源关闭
- IO流中的常见异常并提供解决方案
在IO流操作中,常见的异常包括IOException 及其子类。以下是几个常见的IO流异常和解决方案:
① FileNotFoundException(文件未找到异常):当尝试打开或读取一个不存在的文件时抛出。
解决方案:
确保文件路径和文件名的正确性。
检查文件是否存在,可以使用 File.exists( 方法。
确保具有足够的权限来访问文件。
如果需要创建文件,可以使用 File.createNewFile( 方法。
② IOException(输入输出异常):当读取或写入数据时发生错误时抛出。
解决方案:
检查输入和输出流是否正确初始化和关闭。.
确保在使用流之前检查流的状态,例如通过 inputstream.availabe()方法检查是否有可读数据。
检查文件和目录的权限,确保有适当的读取和写入权限。
处理异常情况,例如使用 ty-catch 语句捕获和处理 I0Exception 。
相关文章:

JAVA_18
JAVA_18 1.IO流2.JAVA_IO流3.标准输入输出4.对象序列化5.字符编码与字符集6.异常处理和资源关闭 1.IO流 IO流(Input/Output stream)是用于在程序和外部设备(如文件、网络等)之间进行数据传输的机制。它是Java中处理输入和输出操作的一种抽象方式。概念: 输入流(Input Stream):…...

Linux升级openssl版本
Linux升级openssl版本 服务器编译依赖库检查 $ yum -y install gcc gcc-c make libtool zlib zlib-devel版本检测 $ openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 $ ssh -V OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013下载openssl 地址:https://www.o…...

多态对象的存储方案小结
某个类型有几种不同的子类,Jackson中的JsonTypeInfo 和JsonSubTypes可以应对这种情形,但有点麻烦,并且name属性必须是字符串、必须用Jackson为基础的json工具类对json字符串和对象进行序列化和反序列化。用过一次这种方案后边就不想再用了。 …...

Linux 之 nano 编辑器
使用git提交的时候,发生冲突或要记录相关信息时会弹出nano这个编辑器。 nano [选项] [[行,列] 文件名]... nano[必要参数][选择参数][文件] 命令行白的部分是组合键,后面的则是该组合键的功能。指数符号(^)代表的是键盘的[ctrl]按键,(M)表示…...

zipkin启动脚本并指定mysql数据存储
#!/bin/bash# 配置部分 ############################################################## Zipkin JAR 文件的名称 # 这里指定了 Zipkin 的可执行 JAR 文件,确保该文件在当前目录中可用。 ZIPKIN_JAR"zipkin-server-2.23.2-exec.jar"# PID 文件的位置 # 该…...

超越GPT-4的视觉与文本理解能力,开源多模态模型领跑者 - Molmo
Molmo是由艾伦人工智能研究所(Ai2)发布的一系列多模态人工智能模型,旨在提高开放系统在性能上与专有系统(如商业模型)之间的竞争力。以下是对Molmo的详细总结: Molmo是什么: Molmo是基于Qwen2和…...

输入输出--I/O流【C++提升】()
1.1基础知识: 在C中,输入输出(IO)流是通过标准库中的 <iostream> 头文件来处理的。C 提供了几种基本的输入输出流类,最常用的有以下几种: std::cin:用于输入。std::cout:用于…...

Maven 中央仓库地址推荐
目录 Maven 中央仓库地址推荐 Maven Maven 中央仓库概述 什么是 Maven 中央仓库? 中央仓库的作用 常用的 Maven 中央仓库地址 官方 Maven 中央仓库 阿里云 Maven 中央仓库镜像 腾讯云 Maven 中央仓库镜像 网易 Maven 中央仓库镜像 华为云 Maven 中央仓库…...

Fastgpt本地化部署 - 以MAC为例
1.认识fastgpt 2.私有化部署 MongoDB:用于存储除了向量外的各类数据PostgreSQL/Milvus:存储向量数据OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验) (1&a…...

SpringBoot框架下购物推荐网站的设计模式与实现
3系统分析 3.1可行性分析 通过对本东大每日推购物推荐网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本东大每日推购物推荐网站采用JAVA作为开发语言&…...

Apache Flink 和 Apache Kafka
Apache Flink 和 Apache Kafka 都是大数据生态系统中非常重要的工具,但它们的作用和应用场景有所不同。下面将分别介绍两者的主要特性和它们之间的异同点。 Apache Kafka 作用: 消息队列:Kafka 主要作为消息队列使用,用于解耦生…...

Excel中Ctrl+e的用法
重点:想要使用ctrle,前提是整合或拆分后的结果放置的单元格必须和被提取信息的单元格相邻,且被提取信息的单元格也必须相连。 下图为错误示例 这样则可以使用ctrle 1、信息整合 2、提取信息 3、添加符号 4、信息顺序调换 5、数字提取 crtle还…...

07-Cesium动态处理线条闪烁材质的属性
这段代码定义了 LineFlickerMaterialProperty 类,用于管理线条闪烁材质的属性。构造函数接收颜色和速度作为选项,类包含动态属性 isConstant 和 definitionChanged,以及获取材质类型和当前属性值的方法。getValue 方法返回颜色和速度的当前值,equals 方法用于比较两个实例是…...

postgresql16分区表解析
PostgreSQL 16 引入了对分区表的多项改进,增强了其性能和可用性。本文介绍PostgreSQL 16 中分区表功能,包括基本概念、创建方法、管理技巧以及一些最佳实践。 分区表的基本概念 分区表是一种将大表物理分割成更小、更易管理的部分的技术。每个部分称为…...

文字识别解决方案-OCR识别应用场景解析
光学字符识别(Optical Character Recognition, OCR)技术是一种将图像中的文字转换为可编辑和可搜索的数据的技术。随着人工智能和机器学习的发展,OCR技术的应用场景越来越广泛,为文字录入场景带来了革命性的变革,下面以…...

Qt 每日面试题 -9
81、请写一个调用消息对话框提示报错的程序 QMessageBox::waring(this,tr("警告"), tr("用户名或密码错误!"),QMessageBox::Yes)82、Qt都提供哪些标准对话框以供使用,他们实现什么功能? Qt提供9个标准对话框: QColorDialog 颜色对话框&…...

K8s环境下使用sidecar模式对EMQX的exhook.proto 进行流量代理
背景 在使用emqx作为mqtt时需要我们需要拦截client的各种行为,如连接,发送消息,认证等。除了使用emqx自带的插件机制。我们也可以用多语言-钩子扩展来实现这个功能,但是目前emqx仅仅支持单个grpc服务端的设置,所以会有…...

Dirble:一款高性能目录扫描与爬取工具
今天给大家介绍的是一款名叫Dirble工具,它是一款易于使用的高性能网站目录扫描工具。该工具针对Windows和Linux平台设计,在Dirble的帮助下,广大安全研究人员可以快速对目标站点进行目录扫描和资源爬取。 工具安装 广大研究人员可以使用下列…...

C#语言基础
GitHub - babbittry/Csharp-notes: C# 课程笔记https://github.com/babbittry/Csharp-notes?tabreadme-ov-file#net%E6%98%AF%E4%BB%80%E4%B9%88 C# 数据类型 | 菜鸟教程 (runoob.com)https://www.runoob.com/csharp/csharp-data-types.html 语法基础 一、命名空间、类、方…...

网络分析仪——提升网络性能的关键工具
目录 什么是网络分析仪? 1. 实时流量监控 2. 历史数据回溯分析 3. 网络性能关键指标监测 4. 可视化界面与报告生成 总结 在当今的数字化世界,网络的稳定性和性能直接影响企业的运营效率。网络拥堵、延迟和丢包等问题会导致用户体验的下降ÿ…...

简单认识Maven 1
1.基本概念 Maven 是一个开源的项目管理和构建工具,主要用于 Java 项目,但也支持其他基于 JVM(Java Virtual Machine)的项目,如 Scala、Groovy 等。它基于项目对象模型(Project Object Model,P…...

鼠标右键删除使用Visual Studio 打开(v)以及恢复【超详细】
鼠标右键删除使用Visual Studio 打开(v) 1. 引言2. 打开注册表3. 进入对应的注册表地址4. 右键删除 AnyCode 项5. 效果6. 备份注册表文件——恢复菜单 1. 引言 安装完 Visual Studio 鼠标右键总有 “使用Visual Studio 打开(v)”,让右键菜单…...

如何缩短微商城系统推广周期
前言 微商城系统的推广周期是企业关注的重点之一。为了缩短推广周期,企业需要采取一系列有效的策略和措施。以下是对如何缩短微商城系统推广周期的详细介绍: 一、明确目标用户群体 在推广之前,企业需要明确自己的目标用户群体是谁…...

电脑如何清理重复文件?方法很简单!
清理重复文件能够有效释放存储空间,提高系统运行效率。长期堆积的重复文件会导致硬盘空间不足,从而影响系统性能。此外,清理文件还能帮助用户更好地管理和组织文件,避免因文件混乱而浪费时间。 常见的重复文件类型 重复文件可以是…...

【Linux】ioctl分析
简介 一个字符设备驱动通常会实现常规的open、release、read和write接口,但是如果需要扩展新的功能,通常以ioctl接口的方式实现。 #mermaid-svg-uY8EyPklf5e4ZMQo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill…...

物联网通信会给人们的生活带来什么样的变化
物联网(IoT)通信的崛起正以前所未有的速度改变着人们的生活方式。从智能家居、智能交通到远程医疗、工业自动化,物联网技术的应用已经渗透到我们日常生活的方方面面。以下是对物联网通信如何具体影响并改变人们生活的详细探讨。 一、智能家居…...

Android 中获取当前 CPU 频率和占用率
最近在优化 App 的性能,需要获取当前 CPU视频频率和占用率,通过查询资料,大致思路如下: 目前没有标准的 API 来获取 CPU 的使用频率,只能通过读取指定 CPU 文件获取当前 CPU 频率,在某些机器或者特定版本中…...

pymobiledevice3使用介绍(安装、常用命令、访问iOS沙盒目录)
项目地址:https://github.com/doronz88/pymobiledevice3 首先先介绍一下pymobiledevice3, pymobiledevice3是用Python3 实现的,用于处理 iDevices(iPhone 等)。它可以跨平台使用,支持:windows…...

python 爬虫模拟登录
在使用 Python 编写爬虫时,模拟登录是一个非常常见的需求,尤其是当你需要爬取需要身份验证的数据时。模拟登录通常需要以下步骤: 分析登录页面:确定提交登录请求的 URL 和相关参数。发送登录请求:模拟用户发送登录表单…...

AOP基础、快速入门、进阶
一、概述 AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),其实就是面向特定方法编程 那什么又是面向方法编程呢,为什么又需要面向方法编程呢?来我们举个例子做一个说明: 比如…...