Java基础之IO总览

Java_NFe:Projeto开源Java-NFe,NFce Java-NFe NFe / NFCe WebService的Java最佳参考书目 Sugestõesou Douvidas顾问 Entre no Discord do Projeto: ://discord.gg/ZXpqnaV Gostou做Projeto吗? Dêsuacolaboração: Para Iniciar: Caso使用Libs baixe或java-nfe-4.00.13.jar( )eo adicioneàbibliotecas de Seu Projeto 。 Baixe o Schemas.rar( )和外部Máquina。 Maven: < dep 立即下载
背景

IO在一般业务开发中不常用到,因此也是很久没有对这部分进行一次系统性的总结,最近有时间也是总结一下。

Java IO总览

Java IO这里指的传统IO,NIO会放到其他文章中介绍。在分类之前先了解一些概念。

流

流是一种对数据传递的抽象概念。比如,我们通过输入流读取磁盘上读取数据,就像水流一样连续源源不断流向用户态内存中。但是本质并非如此,至少不像水流那样源源不断,因为用户开发的程序运行在用户空间,而用户空间的进程是没有直接操作I/O设备的权限,需要内核进程帮忙操作I/O设备,用户空间进程会交出执行权,这个状态叫陷入内核,而用户空间的进程则表现为阻塞状态,等到需要读取的数据被内核进程准备好后,用户空间进程重新获得执行权,继续运行。

字节流

字节流和它的名字一样,是以字节的方式来操作文件的,这里的文件包括图片、视频、文本等,它的使用范围比字符流广泛,并且后面我们会介绍某些字符流如FilerReader也是建立在字节流上操作的,利用StreamDecoder按照编码方式将字节转换成字符,后面会详细介绍。字节流操作的byte。

字节流IO包中类继承关系如下
在这里插入图片描述

字符流

字符流操作的char

字符流IO包中类继承关系如下
在这里插入图片描述

输入流和输出流
  • 输入流:从文件读取到内存,只能进行读操作。
  • 输出流:从内存写入文件中,只能进行写操作。
节点流和处理流
  • 节点流:可以从或向一个特定的地方(节点)读写数据,说的有点抽象,把特定的地方理解为磁盘,内存或者其他设备就可以了。如FileReader
  • 处理流:可以对已存在的流进行连接和封装,如BufferedReader提供了一个缓冲区来操作已存在的输入字符流。
IO流的分类

从前文中两个流继承关系可以看到IO包中的继承关系非常复杂,要想靠这个继承关系搞清楚很难。我们要通过前文介绍的几个概念来对IO流作一个分类。

  • 按照操作方式分类,如图

    在这里插入图片描述

    各个流的简要说明:

    • FileInputStream:文件字节输入流,以字节方式读取
    • FileReader:文件字符输入流,以字符方式读取
    • FileOutputStream:文件字节输出流,以字节方式输出
    • FileWriter:文件字符输出流,以字符放松输出
    • CharArrayReader、StringReader:两种介质流,分别从char[]数组、String中读取数据
    • PipedReader、PipedWriter:分别代表管道字符输入流、输出流
    • BufferedReader、BufferedWriter:分别代表缓冲字符输入流、输出流
    • CharArrayWriter、StringWriter:写入char[]数组、写入String
    • BufferedInputStream、BufferedOutputStream:分别代表缓冲字节输入流、输出流
    • PipedInputStream、PipedOutputStream:分别代表管道字节输入流、输出流
    • ObjectInputStream、ObjectOutputStream:对象序列化输入流、输出流,属于处理流
    • DataInputStream、DataOutputStream:提供基础数据类型读取和写入操作
    • PrintStream、PrintWriter:打印流,是一种输出流

    通过上面的图可以看出,在很多操作都是成对出现的,比如File,就有FileReader、FileWriter、FileInputStream、FileOutPutStream。还有如Pipe、Array、Buffer。所以可以根据流的操作对象分类。

  • 按照流操作对象分类,如图,左边的是处理流,右边是节点流

在这里插入图片描述

这么多流看的眼花缭乱,可想java io的设计者花费的心血。在后续章节中将详细介绍各种流的使用。
文章首发地址:IkanのBolg

Python爬虫实战:全自动采集银行理财产品收益率数据 本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助! 阅读详情

相关推荐

Jetson AGX Orin 部署 JetPack:从依赖缺失到系统升级的完整排障指南

本文详细介绍了在Jetson AGX Orin开发板上部署JetPack SDK的完整排障指南,包括解决依赖缺失、系统升级和常见错误处理。通过确认硬件版本、配置正确的软件源、执行系统升级和安装核心组件等步骤,帮助开发者顺利完成JetPack的安装与配置,确保AI开发环境的稳定运行。

weixin_29172963的博客 160

Docker构建学习环境(3)-部署Spark并提交WordCount任务

Spark概述 Apache Spark是一个开源集群运算框架,最初是由加州大学柏克莱分校AMPLab所开发。相对于Hadoop的MapReduce会在运行完工作后将中介数据存放到磁盘中,Spark使用了存储器内运算技术,能在数据尚未写入硬盘时即在存储器内分析运算。Spark在存储器内运行程序的运算速度能做到比Hadoop MapReduce的运算速度快上100倍,即便是运行程序于硬盘时,Spar...

houwanfeimark的专栏 1097

C# 调用halcon中visualize_object_model_3d显示点云

3.1 判断线程是否为空,如果为空,则新创建,如果不为空,则中断线程,清空窗口后再次执行创建操作3.2 创建:调用show()方法实例化显示类的对象,传入显示参数,将线程testvisual 绑定 在 类对象的action方法上(此处action方法内部,只调用了visualize_object_model_3d算子)3.3 启动线程。

weixin_42362219的博客 1403

Docker构建学习环境(2)-搭建Hadoop集群

认识Hadoop 简单描述,Hadoop是一款实现分布式海量数据存储和离线海量数据分析的工具。官方地址。Hadoop提供的安装方式有单机模式、伪分布式模式和完全分布式模式,不知道为什么有强迫症似的,如果有分布式模式必须要安装完全分布式模式。为了部署完全分布式模式的Hadoop,我采用docker的方式部署3个容器。不得不说docker确实是一个非常适合个人学习的安装各种软件的工具,如果你是wind...

houwanfeimark的专栏 371

educoder实训——计算几何形状的表面积与体积

educoder python实训

qq_41234663的博客 1230

YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析

全网最全YOLOv5项目目录结构超详细分析。逐个文件注释,小白上手必备

路人贾的博客 9万+

Java——异常机制

文章目录一. 什么是异常1.1 异常概述1.2 异常的分类1.2.1 检查性异常1.2.2 运行时异常1.2.3 错误(ERROR)二. 异常体系结构2.1 概述2.2 Error2.3 Exception三. Java异常处理机制3.1 抛出异常3.2 捕获异常3.3 异常处理五个关键字四. 自定义异常4.1 概述4.2 举例五. 实际应用中的经验总结 一. 什么是异常 1.1 异常概述 实际工作中,遇到的情况不可能是非常完美的。 比如:你写个某个模块,用户输入不一定符合你的要求、 你的程序要打开某

巧克力布丁的博客 274

【RT-DETR有效改进】计算训练好权重文件对应的FPS、推理每张图片的平均时间(科研必备)

本文给大家带来的改进机制是利用我们训练好的权重文件计算FPS,同时打印每张图片所利用的平均时间,模型大小(以MB为单位),同时支持batch_size功能的选择,对于轻量化模型的读者来说,本文的内容对你一定有帮助,可以清晰帮你展示出模型速度性能的提升以及轻量化的效果(模型大小),对于以提高精度为目的的读者本文也能够帮助大家展示出现阶段的模型速度指标。所以本文的内容是十分有用的机制,对于大家发表论文来说,下面的图片为运行后的效果可以看到,该有的指标均已打印(本文内容为我独家创新,全网无第二份)下面是效果图和文

Snu77的博客 3629

操作系统笔记-3-线程

多线程出现 传统的进程都是单线程的程序。我们总是希望自己的程序有更高的并行性,传统进程也是有办法实现这种并行性,那就是通过子进程,但是子进程是独立的数据空间,很多时候程序的不同任务都是需要访问相同数据的,因此子进程有很大的局限性。 在这种需求场景下,多线程出现了,它弥补了子进程的缺陷,因为进程内的线程共享进程的资源,可以很容易实现数据共享。 线程概念 线程在进程内部,它共享进程的地址空间。 线程属性 线程共享执行代码,data分段和打开的文件。但是有独立寄存器、程序计数器、状态和栈。第一列是线程共享的进程

houwanfeimark的专栏 565

大模型应用开发 100 天:Python + LLM 从入门到精通 day01~环境搭建与开发工具

Day 1 正式开启《大模型应用开发 100 天》实战旅程。本文聚焦 AI 开发最容易被忽视却至关重要的环境搭建环节,系统讲解基于 pyenv、uv、VS Code 构建一套可复现、项目隔离的标准化 Python 开发工具链。你将掌握多 Python 版本管理、极速依赖安装、虚拟环境隔离、代码规范配置完整流程,配套可直接运行的环境校验脚本与 Mermaid 架构图,规避版本冲突、环境污染等高频踩坑问题,为后续 99 天 LLM 项目开发筑牢底层基础。来自华北理工大学段一凡的博客文章

段一凡的博客 247

多周期路径约束(set_multicycle_path )

1.由慢到快的多周期约束 如下图所示,发射时钟周期是接受时钟周期的4倍。默认情况下,按照1T原则来进行静态时序分析和布局布线的。即建立时间是在发射沿后的第一个捕获沿检查,而保持时间是同一时刻下源时钟和捕获时钟的触发边沿下检查的(建立时间检查边沿的前一个触发沿)。 但是这样导致的问题就是该路径过于苛刻,为了满足这条路径的要求,不得不放弃其他路径。或者根本没办法保证这个默认的约束。总之最终造成...

Arist. 5506

Java基础:IO 流中的 flush

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。 内容概要 Java IO流的设计不得不让人拍案叫绝,佩服设计者鬼斧天工的手法。 如果你是Java初学者,我敢保证第一次接触Java的IO类,一定会 ”狂晕!”,倒不是因为它有多么难学而是太多,而且及其让人有种 “不识庐山...

CodingMan 4万+

2023年12月青少年C/C++软件编程(三级)等级考试试卷及答案解析

有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。第一行一个数字n,n不超过100,表示有n*n的宿舍房间。接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。输出为一行,表达式的值。任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。

长春高老师编程 1511

【JAVA基础】 IO详解

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。既数据在两个设备之间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。Java IO既Java输入输出系统,即in和out,指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。在编写程序时选择适合自己场景的字节流和字符流,及abstract的子类灵活使用。

记录总结工作过往 1209

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java IO流之IO流基础

IO流介绍 IO基础之File类 IO流之字符流 IO流之字节流 IO流之Scanner类

Mr.mooye 2848

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java:IO流——基础篇

着重介绍 File 类和 IO流中的字节流(原始流)

qq_73698057的博客 1384

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【JAVA核心知识】6.1: JAVA IO基础

阻塞IO与非阻塞IO 无论阻塞IO还是非阻塞IO在数据准备就绪的情况下都是一样的,即将就绪数据拷贝至用户线程。不同的是阻塞IO与非阻塞IO在数据未准备就绪时的应对情况。 阻塞IO在数据未准备就绪时用户线程处于阻塞状态:当用户线程发起IO请求时,内核会查看数据是否准备就绪,如果未准备就绪就会等待数据准备就绪,在这个期间线程处于阻塞状态,用户线程交出CPU,在数据准备就绪后,内核将数据拷贝到用户线程,用户线程解除阻塞状态,对数据进行处理。 非阻塞IO在数据未准备就绪是会直接返回未就绪标识:当用户线程发起IO请求

积 1890

Java基础篇 IO流

I 表示intput,是数据从硬盘进内存的过程,称之为读。O 表示output,是数据从内存到硬盘的过程。称之为写IO的数据传输,可以看做是一种数据的流动,按照流动的方向,以内存为参照物,进行读写操作内存在读,内存在写1、节点流可以从一个特定的数据源读写数据,如:FileReader、FileWriter2、处理流(也叫包装流)是连接在以存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,更加灵活多变。如BufferReader、BufferWriter。计算机文件、文件。

分享思想,留下痕迹。 1102

java基础——IO流

是字节输入流,用于从文件中读取字节数据。int data;= -1) {

2403_87486006的博客 796

Java基础IO流

Java基础IO流

qq_52957637的博客 1665

Java IO基础详解

Java IO系列 Java IO基础 Java IO高级 Java NIO Java IO基础Java IO系列写在前面IO 初识什么是流?流的三大特性目录和文件操作流的分类输入流与输出流节点流和处理流字节流与字符流IO流方法实例演示FileInputStream、FileOutputStream(字节流)InputStreamReader、OutputStreamWriter(字符流)FileWriter、FileReader(字符流便捷类)BufferedInputStream、BufferedO

BigData_Hubert的博客 2780

Java IO(一) 之 IO总览

前言: IO对于系统设计来说,是一个很重要的关注点,往往系统运行的瓶颈就在IO设计上,无论是数据库IO,文件IO还是网络IO,都需要进行精致的设计,才能使得系统达到最佳运行状态。对于现代系统并发量、数据量的剧增,IO处理对于系统显得更加重要。研究Java IO对于我们工作有益无害。 Java.io包含了Java阻塞型IO的设计。Java的IO主要包含三个部分: 1.流式

键盘上流淌的日子 9153

[Java基础]IO流

任何文件的底层都是字节,字节流做复制就是一字不漏的转移完全部字节,只要复制后、的文件格式一致就没问题!字节流: 适合操作所有类型的文件, 特别适合数据的迁移, 如文件复制, 不适合读取文本。字符输出流写出数据后, 必须刷新流, 或者关闭流, 写出的数据才能生效。分别使用原始的字节流,以及字节缓冲流复制一个很大的视频, 测试性能。以内存为基准, 把磁盘文件中的数据以字节的形式读取到内存中。以内存为基准, 可以把文件中的数据以字符的形式读取到内存中。创建缓冲流, 然后包装字节流, 字节的读写性能得到提升。

. 1528

【Java 问题】基础——IO

装饰器模式的关键优点是它提供了比继承更灵活的扩展功能的方式。通过使用装饰器,可以动态地添加或删除功能,而不需要修改现有代码。Java IO体系中的装饰器模式允许开发者根据需要组合不同的流来创建具有复杂功能的流处理管道。

zxj20041003的博客 1338

Java基础(IO)

I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理设备之间的数据传输。Java API提供的带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,默认使用8192个字节或字符的缓冲区。在程序中打开的文件 IO 资源不属于内存里的资源,垃圾回收机制无法回收该资源,所以应该显式关闭文件 IO 资源。字符流:操作的数据单元是16位字符,Reader、Writer,通常用于处理文本文件。硬盘-->内存,输入流。IO流是一组有序的,有起点和终点的数据集合,是对数据传输的总称和抽象。

m0_74419713的博客 1793

Java基础——Java IO详解

一、概述 1、Java IO Java IO即Java 输入输出系统。不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要考虑和哪种媒介进行IO(文件、控制台、网络),我们还要考虑具体和它们的通信方式(顺序、随机、二进制、按字符、按字、按行等等)。Java类库的设计者通过设计大量的类来攻克这些难题,这些类就位于java.io包中。 在JDK1.4之后,为了提高Java IO的效率,Java又提供...

qq_45807373的博客 2310
上一篇: 自然语言处理(2)——文档相似度计算
下一篇: Java基础之IO(1)-InputStream
VioletCherry
博客等级 码龄14年 21粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值