【Java】小白友好的java IO操作学习笔记

慢就是快,让知识先沉淀一会。

目录

数据流

文件流

文件复制

缓冲流

字符流

序列化


在 Java 中,流是一种用于处理输入和输出的数据序列的抽象概念。Java 提供了丰富的流类和接口,用于处理不同类型的数据源和数据目标。

Java 中的流可以分为两种主要类型:字节流和字符流。

  1. 字节流:字节流以字节为单位进行读写操作,适用于处理二进制数据或字节流形式的文本数据。字节流类位于 java.io 包中,主要包括 InputStreamOutputStream 类及其子类,例如 FileInputStreamFileOutputStream 等。

  2. 字符流:字符流以字符为单位进行读写操作,适用于处理文本数据。字符流类位于 java.io 包中,主要包括 ReaderWriter 类及其子类,例如 FileReaderFileWriter 等。

这些流类提供了一组丰富的方法,用于从数据源中读取数据(输入流)或将数据写入到数据目标(输出流)。它们提供了高级的操作,如缓冲、字符编码转换等,以提高性能和灵活性。

数据流

数据流是一种特殊的流,它可以读写原始数据类型和字符串。Java 中提供了两个数据流类 DataInputStream 和 DataOutputStream,它们可以方便地读写基本数据类型和字符串。

示例:

// 写入数据
DataOutputStream outputStream = new DataOutputStream(new FileOutputStream("data.txt"));
outputStream.writeInt(10);
outputStream.writeDouble(3.14);
outputStream.writeUTF("Hello, World!");
outputStream.close();// 读取数据
DataInputStream inputStream = new DataInputStream(new FileInputStream("data.txt"));
int i = inputStream.readInt();
double d = inputStream.readDouble();
String s = inputStream.readUTF();
inputStream.close();
System.out.println(i + " " + d + " " + s);

文件流

文件流是一种用于读写文件的流,Java 中提供了 FileInputStream 和 FileOutputStream 两个类,分别用于读取和写入文件。

示例:

// 写入数据
FileOutputStream outputStream = new FileOutputStream("data.txt");
String data = "Hello, World!";
outputStream.write(data.getBytes());
outputStream.close();// 读取数据
FileInputStream inputStream = new FileInputStream("data.txt");
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String s = new String(buffer, 0, length);
inputStream.close();
System.out.println(s);

文件复制

文件复制是一种常见的操作,可以使用 Java I/O API 中的文件流来实现

示例:

FileInputStream inputStream = new FileInputStream("input.txt");
FileOutputStream outputStream = new FileOutputStream("output.txt");
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();

缓冲流

缓冲流是一种增强型的字节流和字符流,它可以提高 I/O 操作的效率。Java 中提供了 BufferedInputStream 和 BufferedOutputStream 两个类,分别用于缓冲读取和写入数据。

示例:

// 写入数据
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("data.txt"));
String data = "Hello, World!";
outputStream.write(data.getBytes());
outputStream.close();// 读取数据
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream("data.txt"));
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String s = new String(buffer, 0, length);
inputStream.close();
System.out.println(s);

字符流

字符流是一种用于读写字符的流,Java 中提供了 Reader 和 Writer 两个抽象类,分别用于读取和写入字符。

示例:

// 写入数据
FileWriter writer = new FileWriter("data.txt");
String data = "Hello, World!";
writer.write(data);
writer.close();// 读取数据
FileReader reader = new FileReader("data.txt");
char[] buffer = new char[1024];
int length = reader.read(buffer);
String s = new String(buffer, 0, length);
reader.close();
System.out.println(s);

序列化

序列化是一种将对象转换为字节流的过程,Java 中提供了 ObjectInputStream 和 ObjectOutputStream 两个类,用于实现对象的序列化和反序列化。

示例:

// 序列化对象
Person person = new Person("Alice", 18);
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("data.txt"));
outputStream.writeObject(person);
outputStream.close();// 反序列化对象
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("data.txt"));
Person p = (Person) inputStream.readObject();
inputStream.close();
System.out.println(p.getName() + " " + p.getAge());

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

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

相关文章

Windows11家庭版上安装Hyper-V并导入虚拟机的方法

大纲 安装启用Hyper-V下载并安装启用 导入虚拟机代码地址 一般我们新买的电脑默认自带的是Windows家庭版。这个版本是没有Hyper-V的。如果安装自带Hyper-V的版本,则需要另外购买。但是我们还是有办法在Windows11的家庭版上安装和启用Hyper-V的。 安装启用Hyper-V …

前端模板字符串的使用

目录 1.说明 2.示例 3.总结 1.说明 模板字符串是用反引号()分隔的字面量,允许多行字符串,带有嵌入表达式的字符串插值和一种带标签的模板的特殊结构。 是增强版的字符串,在进行字符串拼接时,可以拼接固…

如何理解伪标签中的置信度

伪标签中常常有置信度这一说法,通过置信度,我们可以筛选出质量高的伪标签(直观来说是像素),那比如说预测结果为一个2256256的概率图,那针对一个像素的两个通道值,怎样才算质量高或者低呢&#x…

11 python快速上手

函数进阶 函数进阶1.参数的补充1.1 参数内存地址相关【面试题】1.2 函数的返回值是内存地址1.3 参数的默认值【面试题】1.4 动态参数 2. 函数和函数名2.1 函数做元素2.2 函数名赋值2.3 函数名做参数和返回值 3.返回值和print4. 作用域4.1 函数为作用域4.2 全局和局部4.3 global…

一种计数算法

前言 常见的一个问题: 给定一个整形数组, 统计其中有多少唯一的元素. 常见的思路有哪些呢? 元素去重并统计, 利用哈希表进行去重计数.数组排序后统计 以上空间复杂度均与元素数量关联, 如果允许损失精度, 是否可以使用较低的空间占用来统计呢? 利用布隆过滤器是一种的一…

SHELL编程-Linux自动化运维基础(变量与条件控制语法)

SHELL编程-Linux自动化运维基础 变量使用 定义与使用 r123localhost:~$ first_varaaa r123localhost:~$ echo $first_var aaa r123localhost:~$ second_var123 r123localhost:~$ echo $second_var 123 r123localhost:~$ third"bbb ccc" r123localhost:~$ echo $th…

在CentOS 7 中配置NFS服务器

目录 1、克隆两个虚拟机 2、安装 NFS 服务 3、NFS 服务使用 1、克隆两个虚拟机 nfs-servernfs-client(修改ip地址)[rootxnode1 ~]# cd /etc/sysconfig/network-scripts/[rootxnode1 network-scripts]# vi ifcfg-eno16777736 #修改内容如下 BOOTPROT…

【Oracle】ORA-32017和ORA-00384错误处理

文章目录 【Oracle】ORA-32017和ORA-00384错误处理问题描述问题原因和解决测试验证 【声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 收集Oracle数据库内存相关的信息 【Oracle】ORA-32017和ORA-00384错误…

Linux 常见性能指标 -- 磁盘

本系列记录操作系统常见性能指标,写这个主要是记录也是回顾,笔记很长,拆分了几个部分,本篇记录 磁盘 的性能指标 常见概念 响应时间 简单描述:I/O 请求从发出到收到响应的间隔时间 是衡量磁盘性能的关键指标&#x…

【QT+QGIS跨平台编译】之二:【zlib+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、zlib介绍二、文件下载三、文件分析四、pro文件五、编译实践 一、zlib介绍 zlib是一套通用的解压缩开源库,提供了内存(in-memory)压缩和解压函数。zlib是一套通用的解压缩开源库,提供了内存(in-memory&am…

【小沐学GIS】基于C#绘制三维数字地球Earth(OpenGL)

🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第二期3【小沐学GIS】…

DQL基础查询

DQL基础查询 ● DQL(Data Query Language)数据查询语言查询是使用频率最高的一个操作,可以从一个表中查询数据,也可以从多个表中查询数据。 ● 基础查询语法: select 查询列表 from 表名; ● 特点: 查询…

三、内存分配

1. JVM 简化架构概览 1.1 运行时数据区(即内存区域,又称 JVM 内存结构) 如上面的 JVM 简化架构图所示,内存区域分为如下五个部分(这五个部分统称为运行时数据区): PC 寄存器(又称程…

Python-setup进阶打包命令

一、setup.py文件的书写 这个资料有很多,不多赘述,setup 函数常用的参数如下: 基础描述信息: name 包名称(起一个响亮的名字)version (-V) 包版本author 程序的作者author_email 程序的作者的邮箱地址mai…

Kafka-服务端-DelayedOperationPurgatory

DelayedOperationPurgatory是一个相对独立的组件,它的主要功能是管理延迟操作。 DelayedOperationPurgatory的底层依赖于Kafka提供的时间轮实现。 我们可以使用JDK本身提供的java.util.Timer或是DelayQueue轻松实现定时任务的功能,为什么Kafka还要专门…

图像处理之《用于统一源跟踪和深度伪造检测的深度可分离水印SepMark》论文精读

一、文章摘要 恶意的Deepfakes导致了一场关于区分真脸和伪造脸的激烈冲突。尽管已经制定了许多事后检测Deepfakes的对策,但毫无疑问,在可预见的操作之前,被动取证没有考虑对原始人脸采取任何预防措施。为了完成这个取证生态系统,…

python函数的使用

一、函数的定义 Python使用保留字def定义一个函数&#xff0c;形式如下&#xff1a; def <函数名>&#xff08;<参数列表>&#xff09;&#xff1a; <函数体> return <返回值> 函数的调用过程与C语言类似。 关于一中特殊的函数——匿名函数&…

月薪2W的软件测试工程师,到底是做什么的?

在生活中&#xff0c;我们常常会遇到以下几种窘迫时刻&#xff1a; 准备骑共享单车出行&#xff0c;却发现扫码开锁半天&#xff0c;车子都没有反应&#xff1b;手机导航打车&#xff0c;却发现地图定位偏差很大&#xff0c;司机总是跑错地方&#xff1b;买个水&#xff0c;却…

使用flask_limiter限制接口访问速率的方法

flask_limiter 目录 flask_limiter1.简介2.安装3.初始化4.装饰器用法5.limit用法 1.简介 这里简单介绍了一些使用flask_limiter的方法。具体详细可参考官方文档 https://flask-limiter.readthedocs.io/en/stable/ 2.安装 pip install flask_socketio3.初始化 from flask i…

Redis实战之-分布式锁-redission

一、分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如HashTable这样的代码中&#xff0c;他的方法都…