一文了解IO流

主要是背八股太枯燥了,而且目前很少用这个知识点,所以总结一下,方便记忆。

IO流(输入/输出流)在Java中是一个核心概念,广泛用于数据的读取和写入。IO流主别用于处理所有输入和输出操作,无论数据来源是文件、内存、网络还是其他任何数据源。主要的应用场景包括:

文件读写:这是IO流最常见的用途之一。使用IO流,可以从文件中读取数据(文本文件、二进制文件等),也可以向文件中写入数据。例如,FileInputStream和FileOutputStream用于处理文件的二进制数据,而FileReader和FileWriter则用于处理字符数据。

//使用字节流读文件
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class ReadFileExample {public static void main(String[] args) {String filePath = "path/to/your/file.txt";try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
}
//使用字节流写入文件
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class WriteFileExample {public static void main(String[] args) {String filePath = "path/to/your/output.txt";String content = "Hello, World!";try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) {writer.write(content);} catch (IOException e) {e.printStackTrace();}}
}

网络通信:在网络通信中,IO流用于发送和接收数据。例如,当使用套接字(Socket)进行网络编程时,可以通过获取套接字的输入流和输出流来接收和发送数据。

//网络通信客户端
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;public class SimpleClient {public static void main(String[] args) {String hostname = "localhost";int port = 12345;try (Socket socket = new Socket(hostname, port);PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {out.println("Hello from the client!");String response = in.readLine();System.out.println("Server: " + response);} catch (Exception e) {e.printStackTrace();}}
}
//网络通信服务器
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class SimpleServer {public static void main(String[] args) {int port = 12345;try (ServerSocket serverSocket = new ServerSocket(port);Socket clientSocket = serverSocket.accept();PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {String request = in.readLine();System.out.println("Client: " + request);out.println("Hello from the server!");} catch (Exception e) {e.printStackTrace();}}
}

内存操作:IO流也可以用来操作内存中的数据。例如,ByteArrayInputStream和ByteArrayOutputStream可以分别从内存数组读取数据和向内存数组写入数据。

缓冲:为了提高IO操作的效率,Java提供了缓冲流(如BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream),它们使用缓冲区来减少实际进行物理读写操作的次数。

数据转换:IO流还可以用于在不同格式之间转换数据。例如,InputStreamReader和OutputStreamWriter可以将字节流转换为字符流,支持不同的字符编码。

序列化:对象序列化和反序列化也是IO流的一个重要应用,允许将对象的状态保存到文件中或通过网络发送,然后再恢复。ObjectInputStream和ObjectOutputStream是专门用于对象序列化的流。

//序列化
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class SerializeExample {static class Person implements Serializable {private static final long serialVersionUID = 1L;String name;int age;Person(String name, int age) {this.name = name;this.age = age;}}public static void main(String[] args) {Person person = new Person("John Doe", 30);try (FileOutputStream fileOut = new FileOutputStream("person.ser");ObjectOutputStream out = new ObjectOutputStream(fileOut)) {out.writeObject(person);} catch (IOException i) {i.printStackTrace();}}
}
//反序列化
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;public class DeserializeExample {public static void main(String[] args) {Person person = null;try (FileInputStream fileIn = new FileInputStream("person.ser");ObjectInputStream in = new ObjectInputStream(fileIn)) {person = (Person) in.readObject();} catch (IOException i) {i.printStackTrace();return;} catch (ClassNotFoundException c) {System.out.println("Person class not found");c.printStackTrace();return;}System.out.println("Deserialized Person...");System.out.println("Name: " + person.name);System.out.println("Age: " + person.age);}static class Person implements Serializable {private static final long serialVersionUID = 1L;String name;int age;}
}

管道通信:Java IO提供了管道相关的流(PipedInputStream和PipedOutputStream),允许在不同线程之间进行数据传输,实现线程间的通信。

IO流根据处理数据的类型可以分为字节流(以InputStream和OutputStream为基础)和字符流(以Reader和Writer为基础)。字节流主要用于处理二进制数据,如文件和网络数据;字符流则专门用于处理文本数据。根据数据流向的不同,IO流又可以分为输入流和输出流。

使用IO流时,需要注意资源管理,确保在使用完毕后及时关闭流,以释放相关资源。Java 7引入的try-with-resources语句提供了一种简便的资源管理方法,可以自动关闭实现了AutoCloseable接口的资源。

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

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

相关文章

某集团数字化转型蓝图规划项目案例(94页PPT)

案例介绍: 本集团数字化转型蓝图规划项目通过确定目标,如制定集团数字化转型的整体战略和规划,明确转型方向和目标。构建数字化业务体系,实现业务流程数字化、智能化。搭建数字化管理平台,提升集团内部的管理效率和决…

Pyshark——安装、解析pcap文件

1、简介 PyShark是一个用于网络数据包捕获和分析的Python库,基于著名的网络协议分析工具Wireshark和其背后的libpcap/tshark库。它提供了一种便捷的方式来处理网络流量,适用于需要进行网络监控、调试和研究的场景。以下是PyShark的一些关键特性和使用方…

C语言期末考试大纲详解

一: C语言的基本概念 C语言是一种通用的、过程式的计算机编程语言,设计提供了低级内存访问和简单、灵活的语言结构。以下是关于C语言的一些基本概念和组成部分的详细解释。 文件扩展名 .c:这是C语言源代码文件的扩展名。它包含了程序员编…

Noisee 和 Suno创作十二生肖震撼视频 – 有详细的实操步骤

历史文章 日赚800,利用淘宝/闲鱼进行AI音乐售卖实操 如何让AI生成自己喜欢的歌曲-AI音乐创作的正确方式 抖音主播/电商人员有福了,利用Suno创作产品宣传,让产品动起来-小米Su7 用sunoAI写粤语歌的方法,博主已经亲自实践可行 …

docker desktop for mac os如何使用本地代理

在macbook上弄了个代理,然后按照网上所说的去配代理 然后测试下 docker pull busybox 结果无反应,超时。我去!!! 鼓捣了半天,看了docker官网,问了chatgpt ,按照它们所说的试了下也没…

想学编程,什么语言最好上手?

Python是许多初学者的首选,因为它的语法简洁易懂,而且有丰富的资源和社区支持。我这里有一套编程入门教程,不仅包含了详细的视频 讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222,…

Web前端中表示上标:深度解析与实战技巧

Web前端中表示上标:深度解析与实战技巧 在Web前端开发中,表示上标是一个常见的需求,尤其是在处理数学公式、化学符号或者其他需要特殊格式化的文本时。本文将从四个方面、五个方面、六个方面和七个方面深入探讨如何在Web前端中表示上标&…

Gone框架介绍26 - Gone v1.x 版本 正式发布,更加强大的依赖注入,更加卓越的执行效率

gone是可以高效开发Web服务的Golang依赖注入框架 github地址:https://github.com/gone-io/gone 文档地址:https://goner.fun/zh/ 文章目录 优化和新特性gone 核心功能增强内置Goners覆盖测试 后续计划 优化和新特性 gone 核心功能增强 重构了函数参数依…

【区分】累次极限与二重极限

累次极限与二重极限不要混淆,区分好下面5个命题

Java Character类:功能、应用与最佳实践

Java中的Character类是一种用于处理字符数据的包装类,属于java.lang包。作为基础类型char的包装类,Character提供了一系列静态方法来操作和检索字符的各种特性。这包括字符的类别判断(如字母、数字、空白等)、大小写转换、字符比较…

Python学习笔记13 -- API的说明及使用

一、API说明 1、API:Application Programming Interface -- 接口 2、Restful API:基于网页的API 3、JSON:JavaScript objection Notation 4、很多数据都可以找到公用API 二、安装requests模块 在终端输入: 可以保证使用当前…

os.system() 函数

os.system() 是 Python 标准库 os 模块中的一个函数,用于在子终端中运行系统命令。它可以在 Python 脚本中调用外部命令或程序。具体来说,它通过执行命令字符串并返回执行状态来实现这一点。下面是对 os.system() 函数的详细解释: import os…

第66集《摄大乘论》

请大家打开《讲义》第二二二页: 庚九、念(分二:辛一正念法身;辛二兼显净土) 辛一、正念法身(分二:壬一征;壬二释) 壬一、征 这个是讲到十门分别(二0三页),分别清净法身的第九段,讲到念&…

单片机多个中断源时的设计思路,(51为例)工作寄存器R0-R7

51单片机中四组工作寄存器(R0-R7) 参考 可以看出每个工作寄存器区有8个字节即为R0-R7,当不指定使用哪个工作寄存器区的时候默认0区。其他工作区作为普通的RAM使用。特殊功能寄存器中有可以位寻址和不能位寻址的区域 下面文字引用 通过修改…

常用静止轨道卫星(geostationary satellite)及相关产品

1. 数据简介 维基百科 link 地球静止轨道(或称地球赤道同步轨道,英语:geostationary orbit,简写:GEO)是指地球赤道面上方35,786km的圆形轨道,该轨道上航天器的运行方向和地球自转方向一致。在…

使用python绘制三维散点图

使用python绘制三维散点图 三维散点图三维散点图的用途效果代码 三维散点图 三维散点图(3D Scatter Plot)是一种用于展示三维数据的图表。与二维散点图类似,三维散点图通过点在三维空间中的位置来表示数据点的三个特征。每个点在 x、y 和 z …

突破数据存储瓶颈!转转业财系统亿级数据存储优化实践--图文解析

突破数据存储瓶颈!转转业财系统亿级数据存储优化实践–图文解析 原文链接:https://juejin.cn/post/7358704806779437097 原文作者:转转技术团队 业财系统:业务和财务一体化系统 与传统财务记账不同,一笔金额不再是…

【Python网络爬虫分步走】使用LXML解析网页数据

Python网络爬虫分步走 – 使用LXML解析网页数据 Web Scraping in Python - Using LXML to Parse Web Data By Jackson@ML Lxml作为Python的第三方库,提供易用的且功能强大的API,用来解析XML和HTML文档。事件驱动的API被用于分步骤解析。 本文简要介绍使用lxml库解析网页的基…

机器学习中的神经网络重难点!纯干货(上篇)

. . . . . . . . .纯干货 . . . . . . 目录 前馈神经网络 基本原理 公式解释 一个示例 卷积神经网络 基本原理 公式解释 一个示例 循环神经网络 基本原理 公式解释 一个案例 长短时记忆网络 基本原理 公式解释 一个示例 自注意力模型 基本原理…

一些前端优质的代码片段

在前端编程中,高质量的代码不仅实现功能,还注重可读性、可维护性和性能。以下是一些值得品味和学习的优质前端代码片段,涵盖了函数式编程、ES6新特性、以及一些最佳实践示例: 文章目录 1. 箭头函数与数组方法结合使用2. 解构赋值…