Java流【全】

article/2025/8/13 15:36:43

IO流分类

AA、根据数据流动的方向:输入流和输出流

如:打开一个新的记事本并输入一些内容,而这些内容是在内存里面的,没有存储到磁盘中,当点击保存之后,数据才会从内存流向磁盘;当双击打开磁盘文件的时候,数据才会从磁盘流向内存【数据存储有一个特点:内存一旦断电数据消失,磁盘永久保存】如何选择使用输入流或者输出流?【程序角度来说:Ctrl+s当内存流向磁盘[输出流],双击打开磁盘文件磁盘流向内存[输入流]

什么是IO?

I(InputStream)O(OutputStream)指的就是输入流和输出流

生活中遇到常见的流:物流、人流、车流、水流、电流……【共同点:强调一个东西,从一个地方到另一个地方】

BB、根据数据流动的类型:字节流和字符流

数据流动的单位是字节就叫做字节流

数据流动的单位是字符就叫做字符流

IO的四大抽象流(都是抽象类):

InputStream:所有字节输入流的基类,其中API里面无提供专门获取对象的方法,可以自己写一个子类继承它,或者直接找它已有的子类,new一个它的子类就能用InputStream里面的方法

这里操作的是文件,就选一个相近一点的使用InputStream下面的子类——FileInputStream

FileInputStream 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境
FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader

字段摘要【无】

构造方法摘要

FileInputStream(File file)

	通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定根据指定的文件**对象**创建字节输入流对象

FileInputStream(String name)

	通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定根据指定的文件**路径名**创建字节输入流对象
public class InputStremFileInputStremDemo {public static void main(String[] args) throws FileNotFoundException {//该构造需要抛异常,可进入FileInputStream构造里面看//创建字节输入流对象FileInputStream fileInputStream = new FileInputStream("xxxxxx.txt");//不存在的文件System.out.println(fileInputStream);//文件不存在,报错//Exception in thread "main" java.io.FileNotFoundException: xxxxxx.txt (系统找不到指定的文件。)}
}

方法摘要

int read()

	从此输入流中读取一个**数据字节**,下一个数据字节无则返回 -1一次性只能读取到一个字节,返回的是ASCII值,如果读到末尾返回 -1

在这里插入图片描述
先创建a.txt文件并写入内容保存,再使用字节输入流读取出来

从文件读取出来是对应的数字public class InputStremFileInputStremDemo {public static void main(String[] args) throws IOException {//创建字节输入流对象FileInputStream fileInputStream = new FileInputStream("D:/hh/a.txt");//读取第一个字节int readK = fileInputStream.read();//read方法需要抛异常System.out.println(readK);//读取第二个字节int readS = fileInputStream.read();System.out.println(readS);//读取第三个字节int readD = fileInputStream.read();System.out.println(readD);//读取第四个字节int readJ = fileInputStream.read();System.out.println(readJ);//读取第五个字节int read = fileInputStream.read();System.out.println(read);/*** 107* 115* 100* 106* -1*///关闭IO流fileInputStream.close();}
}从文件读取出来是对应的内容public class InputStremFileInputStremDemo {public static void main(String[] args) throws IOException {//创建字节输入流对象FileInputStream fileInputStream = new FileInputStream("D:/hh/a.txt");//读取第一个字节int read = fileInputStream.read();//read方法需要抛异常System.out.println((char) read);//读取第二个字节read = fileInputStream.read();System.out.println((char)read);//读取第三个字节read = fileInputStream.read();System.out.println((char)read);//读取第四个字节read = fileInputStream.read();System.out.println((char)read);//读取第五个字节read = fileInputStream.read();System.out.println(read);//无对应内容/*** k* s* d* j* -1*///关闭IO流fileInputStream.close();}
}

循环读取字节——模式1【这里的缺陷:一次性只能装一个数据,因为read()方法只能一次性读取一个字节】

public class InputStremFileInputStremDemo {public static void main(String[] args) throws IOException {//创建字节输入流对象FileInputStream fileInputStream = new FileInputStream("D:/hh/a.txt");//一次性读取一个字节int read ; //这里不是没有初始化,没报错的原因,因为其实下面使用已经赋值了,局部变量必须会赋值,不然会提示Variable 'read' might not have been initialized//定义一个可变字符串,来拼接字符StringBuilder stringBuilder = new StringBuilder();//循环读取字节,把读取出来的字符赋值给read,然后以read去判断是否等于-1//这里不确定循环的次数所以不能用for循环,所以不知道循环次数都用whilewhile ((read = fileInputStream.read()) != -1){stringBuilder.append((char) read);//System.out.println((char)read);/*** k* s* d* j*/}System.out.println(stringBuilder);//ksdj//关闭IO流fileInputStream.close();}
}

常识:一个英文字母占一个字节

int read(byte[] b)

	从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中一次性能读取多个字节,返回读取字节的个数,如果读到末尾返回 -1

循环读取字节——模式2【这里的缺陷:一次性能装多个数据,因为read(byte[] b)方法能一次性读取多个字节】

public class InputStremFileInputStremDemo {public static void main(String[] args) throws IOException {//创建字节输入流对象FileInputStream fileInputStream = new FileInputStream("D:/hh/a.txt");//一次性读取多个字节byte[] bytes = new byte[4];//如果这里为7,实际只有四个字节,会显示null//把读取出来的字节放到bytes数组里面fileInputStream.read(bytes);System.out.println(Arrays.toString(bytes));//[107, 115, 100, 106]/*** String(byte[] bytes)* 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String*/System.out.println(new String(bytes));//ksdj//关闭IO流fileInputStream.close();}
}有中文可以输出中文public class InputStremFileInputStremDemo {public static void main(String[] args) throws IOException {//创建字节输入流对象FileInputStream fileInputStream = 

http://www.hkcw.cn/article/mdJmMVnbPL.shtml

相关文章

大模型登《情报学报》!大模型驱动的学术文本挖掘!

武汉大学信息管理学院、武汉大学信息检索与知识挖掘研究所的陆伟、刘寅鹏、石湘、刘家伟、程齐凯、黄永和汪磊共同研究的《大模型驱动的学术文本挖掘——推理端指令策略构建及能力评测》在《情报学报》中发表。论文以学术文本挖掘任务为切入点,构建涵盖文本分类、信…

UI 设计|提高审美|极简扁平过时吗?

​在做UI界面时,极简扁平一直是个稳妥又高适配的选择。它没有复杂的质感和装饰,更强调清晰、直接和功能导向,能快速搭建出干净、有秩序的界面,适合大多数场景落地。 但是也确实有太多太相似的极简导致确实辨识度,这中…

哈尔滨工业大学提出ADSUNet—红外暗弱小目标邻帧检测新框架

ADSUNet: Accumulation-Difference-Based Siamese U-Net for inter-frame Infrared Dim and Small Target Detection 作者单位:哈尔滨工业大学空间光学工程研究中心 引用: Liuwei Zhang, Yuyang Xi, Zhipeng Wang, Wang Zhang, Fanjiao Tan, Qingyu Hou, ADSUNet: A…

#14 【Kaggle】 Drawing with LLMs 金牌方案赏析

用大模型画svg的比赛结束了,本来还是银牌的,shake down成了铜牌… 痛定思痛,瞻仰一下第一名的金牌解决方案。 🍕 比赛简单介绍 给定一段描述图像的文本提示,你的任务是生成可缩放矢量图形(SVG)代码,将其尽可能准确地渲染为一幅图像。 本次竞赛旨在构建既实用又可复用…

多任务——进程

1.进程的介绍 1. 进程的基本概念 在 Python 中,进程是操作系统分配资源和调度的基本单位,代表一个独立的程序执行实例。Python 的 multiprocessing 模块支持多进程编程,允许在单个程序中并行运行多个进程。每个进程拥有: 独立的…

Baklib加速企业AI数据治理实践

企业知识中台构建路径 在数字化转型进程中,企业需通过知识中台实现知识资产的系统性整合与价值释放。Baklib作为典型解决方案,以智能化技术为支撑,通过标准化数据接口打通CRM、ERP等异构系统,构建全域知识图谱。其核心实施路径包…

设计模式——状态设计模式(行为型)

摘要 状态设计模式是一种行为型设计模式,核心在于允许对象在内部状态改变时改变行为。它通过状态对象封装不同行为,使状态切换灵活清晰。该模式包含环境类、抽象状态类和具体状态类等角色,具有避免大量分支判断、符合单一职责和开闭原则等特…

搜索引擎2.0(based elasticsearch6.8)设计与实现细节(完整版)

1 简介 1.1 背景 《搜索引擎onesearch 1.0-设计与实现.docx》介绍了1.0特性,搜索schema,agg,表达式搜索映射,本文介绍onesearch 2.0 新特性, 参考第2节 规划特性与发布计划 1.2 关键词 文档 Document elasticsearch 一行数据称为…

【项目记录】登录认证(上)

前面已经实现了部门管理、员工管理的基本功能,但并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的,所以这次的主题就是登录认证。最终要实现的效果是: 如果用户名密码错误,不允许登录系统。 如…

Redis:安装与常用命令

🌈 个人主页:Zfox_ 🔥 系列专栏:Redis 🔥 安装 Redis 使⽤apt安装 apt install redis -y⽀持远程连接 修改 /etc/redis/redis.conf 修改 bind 127.0.0.1 为 bind 0.0.0.0 修改 protected-mode yes 为 protected-mo…

16-前端Web实战(Tlias案例-部门管理)

在前面的课程中,我们学习了Vue工程化的基础内容、TS、ElementPlus,那接下来呢,我们要通过一个案例,加强大家对于Vue项目的理解,并掌握Vue项目的开发。 这个案例呢,就是我们之前所做的Tlias智能学习辅助系统…

MagicAnimate 论文解读:引入时间一致性的视频人物动画生成方法

1. 前言/动机 问题:现有动画生成方法缺乏对时间信息的建模,常常出现时间一致性差的问题 描述: 现有的动画生成方法通常采用帧变形(frame-warping)技术,将参考图像变形以匹配目标动作。尽管这类方法能生成较…

C语言基础(09)【数组的概念 与一维数组】

数组 数组的概念 什么是数组 数组是相同类型、有序数据的集合。 数组的特征 数组中的数据称之为数组的元素(数组中的每一个匿名变量空间,是同构的)数组中的元素存放在内存空间建立。 衍生概念:下标(索引) 下标或者索引代表…

Spring MVC参数绑定终极手册:单多参/对象/集合/JSON/文件上传精讲

我们通过浏览器访问不同的路径,就是在发送不同的请求,在发送请求时,可能会带一些参数,本文将介绍了Spring MVC中处理不同请求参数的多种方式 一、传递单个参数 接收单个参数,在Spring MVC中直接用方法中的参数就可以&…

【Go-补充】Sync包

并发编程-Sync包 sync.WaitGroup 在代码中生硬的使用time.Sleep肯定是不合适的,Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法: 方法名功能(wg * WaitGroup) Add(delta int)计数器delta(wg *WaitGroup) Done()…

M-OFDM模糊函数原理及仿真

文章目录 前言一、M序列二、M-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、m-OFDM 模糊函数②、m-OFDM 距离分辨率③、m-OFDM 速度分辨率④、m-OFDM 等高线图 四、资源自取 前言 本文进行 M-OFDM 的原理讲解及仿真&#x…

《C++初阶之入门基础》【C++的前世今生】

【C的前世今生】目录 前言:---------------起源---------------一、历史背景二、横空出世---------------发展---------------三、标准立世C98:首个国际标准版本C03:小修订版本 四、现代进化C11:现代C的开端C14:对C11的…

长上下文推理新范式!QwenLong-L1如何通过强化学习突破大模型语境局限?

长上下文推理新范式!QwenLong-L1如何通过强化学习突破大模型语境局限? 在大模型推理能力不断精进的今天,长上下文处理仍是亟待突破的难题。本文介绍的QwenLong-L1框架,借助渐进式语境扩展与强化学习,成功让大模型在长…

git 学习

目录 关于git 版本管理概述 git的优点 一 下载,安装git 二 使用git 的处理流程 三 学习基本的git命令 1 git初始化 2 查看 状态 3 提交的缓存区 4回退到工作区 关于git 版本管理概述 码云:Gitee - 基于 Git 的代码托管和研发协作平台 git 是用…

中国风展示工作总结商务通用PPT模版

中国风展示工作总结商务通用PPT模版:中国风商务通用PPT 模版https://pan.quark.cn/s/42ad18c010d4