Java 字节流InputStream、OutputStream、FileInputStream、FileOutputStream

【JAVA】-- 字节流InputStream和OutputStream、向文件读写内容 一、字节流 计算机中,所有文件都以二进制(字节)形式存在,而对于字节的输入输出IO流提供了一系列的流,统称为字节流。 字节流可分为字节输入流和字节输出流。 抽象类InputStream和OutputStream,它们是字节流的顶级父类,所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream。 InputStream是向文件读取,OutputStream是向文件输出。 InputStream提供了一系列与读写数据有关的方法: 第一个re.. 阅读详情


InputStream  和OutputStream

第一种方式:使用字节输出流建立一个文件并存储一些数据

FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write("abcdsjfl".getBytes());  //getBytes()将字符串转化成字节存储到byte数组中
fos.close();  // 关闭资源
InputStream :
FileInputStream fis = new FileInputStream("fos.txt");
        byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf))!=-1){
	System.out.println(new String(buf,0,len));
}


第二种方式:

FileInputStream fis = new FileInputStream("fos.txt");
int by = 0;
while((by=fis.read())!=-1){
	System.out.println((char)by);
}

第三中方式:

FileInputStream fis = new FileInputStream("fos.txt");
byte[] buf = new byte[fis.available()];//文件体积过大,会内存溢出。
fis.read(buf);
//复制图片
FileInputStream fis = new FileInputStream("d:\\java32\\day17\\ma.JPG");
FileOutputStream fos = new FileOutputStream("d:\\ma.bmp");
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf))!=-1){
	fos.write(buf,0,len);
}
fos.close();
fis.close();


字节流缓冲区:        

FileInputStream fis = new FileInputStream("c:\\0.mp3");
BufferedInputStream bufis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("c:\\1.mp3");
BufferedOutputStream bufos = new BufferedOutputStream(fos);
int temp = 0;
while((temp=bufis.read())!=-1)
{
bufos.write(temp);
}
bufos.close();
bufis.close();

字节流缓冲区原理注意事项:

read方法读取了一个字节是连续的8个1。正好是-1.那么循环就停止了。

为什么,字节读取流的read方法一次读一个字节,返回值类型,不是byte,而是int呢?

那是因为,在读取一个字节数据时,容易出现连续8个1的情况,连续8个1是-1.

正好符合了流结束标记。所以为了避免,流操作数据是提前结束,将读到的字节进行int类型的提升。保留该字节数据的同时,前面都补0.(&255).避免-1的情况。

输出流的write方法虽然接收是一个整数,四个字节,但是write只将最后一个字节写出。其他字节抛弃。


转换流:字节流和字符流之间的桥梁

InputStreamReader  字节转成字符的桥梁

比如:

InputStream in = System.in;//键盘录入
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bufr = new BufferedReader(isr);

匿名对象简写:

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));


读取键盘录入数据 并将数据每一行以大写形式打印在控制台上,如果录入的数据是over,该程序结束 

InputStream in = System.in;
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bufr = new BufferedReader(isr);
String line = null;
while ((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
System.out.println(line.toUpperCase());
}
bufr.close();


OutputStreamWriter  字符转成字节的桥梁

比如:

OutputStream out = System.out;
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bufw = new BufferedWriter(osw);


匿名对象简写:

BufferedWriter bufw = new BufferedWriter(new OutpurStreamWriter(System.out));

转换流其实就是字节流+字符编码,没有指定编码,默认本机编码,GBK

其实流的操作就是对源和目的的操作。流其实就是在富足和目的设备上的数据传输

因为流的对象有很多,什么情况下,要使用什么对象


流的操作规律:

1  明确源和目的

源:读取InputStream  Reader

目的: 写入   OutputStream  Writer


2  明确操作的数据内容

数据是否是存文本数据:

是:源  Reader    

         目的  Writer

否 :源   InputStream

         目的   OutputStream

3 明确设备

 源设备: 硬盘(带File的流对象),键盘(System.in),内存(带数组的流对象)

目的设备:硬盘(带File的流对象),控制台(System.out),内存(带数组的流对象)


4  明确是否需要高效和一些具体功能

是:使用Buffer

否:不使用Buffer

具体功能:

是一些具体的特殊的对象。

可以操作基本数据类型的流对象 ,或者操作对象的流对象等


Writer

|-----OutputStreamWriter:该流中加入了编码表

|-----FileWriter  :操作文件的字符流对象,该对象中使用默认的编码表GBK

所以子类FileWriter只能操作GBK编码表,而父类可以操作指定的编码表,在实际应用中,如果数据是GBK的,不涉及其他编码表,可以使用FileWriter来完成,如果涉及其他编码表,就必须用父类OutputStreamWriter来完成


Reader

|-----IntputStreamReader:

|-----FileReader  和上面一样


File 类:

用来将文件或者文件夹封装成对象,方便于对文件与文件夹的属性信息进行操作,File对象可以作文产生传递给流的构造函数

File类的常见方法。

1,创建。

boolean createNewFile():创建文件。

boolean mkdir():创建文件夹。

boolean mkdirs():创建多级目录。

2,删除。

boolean delete():

deleteOnExit();


3,判断。

isAbsolute():是否是绝对路径。

exists():是否存在。

isDirectory():是否是文件夹。

isFile():是否为文件。


4,获取。

long length():文件大小。

getName() :文件名

getParent()   父目录, 如果封装File对象时,不指定路径, 返回 null

getPath() 路径  封装什么路径就是什么路径

getAbsolutePath() 绝对路径。 无论封装什么路径,获取的都是绝对路径。

String[] list():获取指定目录下当前的文件夹和文件名称。

File[] listFiles():获取指定目录下当前的文件夹和文件对象。

static File[] listRoots():获取本机有效盘符。

String[] list(FilenameFilter ):获取指定过滤器过滤后的文件或者文件夹名称

File[] listFiles(FileFilter ):获取指定过滤器过滤后的文件或者文件夹对象

5,renameTo:对文件进行改名。还可以剪切。

6,compareTo():File实现了Compareable接口。 文件可以排序。

AI 算力基础设施深度系列(一):从容器到 Kubernetes——算力底座的诞生 1. 容器 = Namespace(视图隔离) + Cgroup(资源限制) + Union FS(镜像分层)└── 不是虚拟机!共享内核,接近零开销2. K8S 三大设计哲学:└── 声明式 API + 控制循环 + 可扩展架构3. K8S 架构:└── 控制面 (API Server / etcd / Scheduler / Controller Manager) 阅读详情

相关推荐

深入解析五大ADC芯片架构及其应用场景

本文深入解析了五大ADC芯片架构及其应用场景,包括逐次逼近型ADC、Σ-Δ型ADC、流水线型ADC、闪存型ADC和积分型ADC。通过详细的架构分析和实际应用案例,帮助工程师理解不同ADC芯片的特点和适用场景,提升电路设计效率。

weixin_28702105的博客 355

关于FileOutputStream(字节输出流)

关于FileOutputStream(字节输出流)

heliuerya的博客 3187

通过Jlink和PyLink读取蓝牙mac地址--Nordic&silicon labs

本文介绍在不开机的情况下读取蓝牙的mac地址,这里介绍两个平台,Nordic和Silicon Labs。 1. 通过Jlink Commander工具连接上目标板 选择当前芯片的型号 2. 使用mem命令查看mac地址 首先需要知道mac地址存储在芯片的哪个地址。 Nordic: 寄存器DEVICEADDRTYPE的第一个bit代表mac地址的类型,这里为1。DEVICEADDR[0]和DEVICEADDR[1]的低16bit代表了MAC地址,其中DEVICEADDR[1]的第15位应该或上DE

ching的专栏 1650

字节的输入输出流

1.OutputStream类 OutputStream它不仅可以写入字节,字符,还可以写入图片等媒体文件

tianhumanong的博客 3965

西门子Industrial Copilot实战:5个工业场景下的AI效率提升案例

本文通过五个工业场景实战案例,深入解析西门子Industrial Copilot如何将工业智能转化为实际生产力。从自动化配置、预测性维护到能源优化与人机交互,这位AI助手显著缩短工程周期、提升设备可用率并降低运营成本,展示了其在工业领域系统化、工程化的落地价值。

3c4x5z6v7b的博客 928

光耦选型避坑指南:如何根据CTR参数精准计算输入输出电阻(附24V工业场景实例)

本文深入解析光耦选型核心,聚焦电流传输比(CTR)参数及其衰减特性,提供从输出需求反向推导输入输出电阻的精准计算方法。文章以24V工业场景为例,结合光电耦合器数据手册,详细阐述了如何根据CTR最小值进行降额设计,并给出包含反接保护、TVS管等在内的完整保护电路方案,旨在构建高可靠、长寿命的信号隔离电路,避免因选型或设计不当导致的系统故障。

nept的博客 1040

110.OutputStream字节流

OutputStream抽象类是所有类的字节输出流的父类 OutputStream抽象类实现的类: OutputStream抽象类的所有方法 方法 说明 void close() 关闭此输出流并释放与此流关联的任何系统资源。 void flush() 刷新输出流,使缓存数据被写出来。 void write(byte[] b) 写 b.length字节从指定的字节数组的输出流。 void write(byte[] b, int off, int len) 写 len字节指定字节.

qq_43808700的博客 560

IKM 测试题 - Java SE 8 评估测试题目

IKM 测试题 - Java SE 8 评估测试题目

licheng11y的博客 1315

FileOutputStream 文件字节输出流

public class FileOutputStreamTest { public static void main(String[] args) { FileOutputStream fos = null; try { /*为什么会加true? 在原文件的基础上追加内容,不加true的话,会将原文件清空然后再追加内容*/ /*在此路径下,如果文件不存在,会自己创建一个*/ fos = ne.

weixin_51351637的博客 2067

ArcGIS实战:手把手教你用DEM和灾害点数据,5步搞定地质灾害风险区划图

本文详细介绍了使用ArcGIS进行地质灾害风险评估的完整流程,从DEM和灾害点数据出发,通过五步标准化操作生成专业风险区划图。重点讲解了信息量模型的应用,帮助读者掌握GIS技术在地质灾害易发性评价中的实践方法,提升风险评估效率与准确性。

weixin_30696427的博客 426

Classic AUTOSAR精讲专栏目录

欢迎大家来到钢琴上的汽车软件创建的《Classic AUTOSAR精讲系列专栏》,期待在这里能够与大家一起进步,分享成功,分享喜悦!下面蓝色的文章标题都是传送门,点击直接跳转到对应文章。

酒无忧的博客 3911

字节流输出流OutputStream

字节输出流(OutputStream) java.io.OutputStream抽象类是表示字节输出流的所有类的超类,注意该类是个抽象类 子类共性的成员方法 1、public void close()方法 作用:关闭输出流并释放与此流相关联的任何系统资源 2、public void flush()方法 作用:刷新此输出流并强制任何缓冲的输出字节被写出 3、public void write(byte[ ] b)方法 作用:将b.length字节从指定的字节数组中写入此输出流 4、public void w

技术积累,技术分享 1795

UFAST车道线检测 Ultra-Fast-Lane-Detection 从环境搭建到复现完成(一)

UFAST车道线检测 Ultra-Fast-Lane-Detection 从环境搭建到复现完成(一)

m0_46364958的博客 4345

Java IO流之字节流:OutputStream、FileOutputStream、InputStream、FileInputStream

文章目录JAVA IO流一、字节流字节输出流1、OutputStream 抽象类 JDK 1.0常用方法2、FileOutputStream 类构造方法( 共5个 )写出字节流数据追加续写与换行字节输入流1、InputStream 抽象类 JDK 1.0常用方法2、FileInputStream 类构造方法读取字节流练习:文件复制 JAVA IO流 Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做写出数据。 根据数据的流向分为:输入流和输出流 输

阿星小天地 1132

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JAVA IO之字节流-OutputStream-InputStream-FileOutputStream-FileInputStream

JAVA IO之字节流-OutputStream-InputStream-FileOutputStream-FileInputStream 1. 一切皆为字节 所有文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都是一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。 2. 字...

weixin_43838446的博客 443

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

036-Java IO- 字节流InputStream、OutputStream,FileInputStream、FileOutputStream

目录 IO概述 什么是IO IO的分类 IO的流向说明 java IO流 Java IO分类 字节流 字节输出流OutputStream FileOutputStream类 写出字节 写出字节数组 写出指定长度字节数组 写出换行 字节输入流InputStream FileInputStream类 读取字节 使用字节数组读取 感谢关注 IO概述 什么是IO ...

陈塘关哪吒 223

Java之IO简述第二讲——[IO流的分类] 以及【outputStream】&& 【inputStream】

大家好,我是尽欢Sir,一名在校大学生,本文主要讲解IO流的分类以及字节流的详细介绍,如果大家读后觉得有用的话,还请大家多多支持博主:欢迎 ❤️点赞👍、收藏⭐、留言💬您的支持就是我最大的创作动力!谢谢! ✨✨✨个人主页:尽欢Sir 文章目录🌾前言🌾IO流的分类💎OutPutStream🌈常用方法close()flush()乌鸦喝水write()write(byte[] b, int off, int len)write(int b)低八阶位💎InputStream🌈常用方法close()read()re.

you do ,you win 2174

Java笔记:字节流InputStream/OutputStream详解

目录1 一切皆为字节2 字节输出流OutputStream2.1 FileOutputStream类2.1.1 创建输出流对象2.1.2 写出字节数据2.1.3 数据追加续写2.1.4 写出换行3 字节输入流【InputStream】2.5 FileInputStream类构造方法读取字节数据4 字节流练习:图片复制复制原理图解案例实现 1 一切皆为字节 一切文件数据(文本、图片、视频等)在存储时,都是以二进制的形式保存,都是一个个字节; 传输时同样如此; 因此,字节流可以传输任意类型文件数据; 在操作流

sc179的博客 1708

黑马程序员—Java IO流(InputStream、FileInputStream、OutputStream、FileOutputStream、字节流缓冲区)

字节流: InputStream:是表示字节输入流的所有类的超类。      |--- FileInputStream:从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。      |---FilterInputStream:包含其他一些输入流,它将这些

welcome to my blog,thank you! 1042

JAVA如何读取写入文件,InputStream与OutputStream

一、背景介绍 Java的流式输入输出建立在4个抽象类的基础上:InputStream,OutputStream,Reader和Writer。它们用来创建具体的流式子类。InputStream和OutputStream类被设计为字节类,而Reader和Writer被设计为字符流类。本文只是讲字节流类。 字节流中的两个顶层类为:InputStream(输入字节流)和OutputStream(输出字节流). 其下有两个子类FileInputStream(文件输入流)和FileOutputStream(文件输.

lindaicoding的博客 6605

IO流之OutputStream、InputStream详解

前言 学习之前,需要对IO流的分类有个简单的认识,下列是关于本文的IO流分类介绍 IO流的分类 按流的方向划分 输入流 输出流 按流动的数据类型划分 字节流 字符流 本文提到的OutputStream、InputStream属于字节流 字节流 输入流 顶级父类InputStream 输出流 顶级父类OutputStream 还需要明确一个概念 计算机中的任何数据(文本、图片、视频等)都是二进制存储的 8个二进制位(bit)为一个字节(by

成为一位优秀的职场人,我在路上 1355

字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流

字节流 抽象类InputStream和OutputStream是字节流的顶级父类 所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStream InputStream的常用方法: int read() int read(byte b[]) int read(byte b[], int off, int len) void close() OutputStream的常用方法: v

m0_53821599的博客 4710

inputstream outputstream 和byte[]的关系

1. 数据来源 InputStream 本质上是byte[] ,input 意味者将数据从外部获取到内存,并封装到byte[]中。 子类: FileInputStream流是从文件中获取数据(文件,不在内存中的数据); ByteArrayInputStream从内存中获取数据(已经存在于内存的数据); 最终,都会产生一个InputStream类型的对象。 2. 代码解析 2.1 简单复制文件 public static void main(String[] args) throws IOExcept

日日留心的技术专栏 1960

java字节流

前言 输入流:把数据(键盘输入、鼠标、扫描仪等等外设设备)读入到内存(程序)中 输出流:把内存(程序)中的数据输出到外设或其他地方,从文件角度简单总结就是,输入流就是读数据,输出流就是写数据。 在这个过程中,始终把内存作为参考点。 在JAVA语言中,定义了专门的类用来表示输入和输出,这些类放在java.io包中。按数据传输单位划分,可以分为字节流和字符流。 本文重点介绍字节流 InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节8位,类图如下 Output

clyu的博客 2291

FileInputStream 和FileOutputStream的概述,看完秒懂,内布操作

底层的最原本的文件字节流的操作:InputStream outputStream 1 .InputStream 和 OutputStream两个字节流都是抽象类,不能进行实例化操作,使用它的子类进行文件按的操作 2. 字节输出流:从内存中按字节流的形式写出到硬盘等存储介质上——FileInputStream 1. 字节输出流和字符输出流是不一样的,字节输出流底层是没有自带的缓冲取得, 2. 如果使用构造方法中中append参数,不指定默认位false那么每次写出的内容将会崔原来的内容进行全面

虚空掠夺者~ 846
上一篇: Java 字符流的使用
下一篇: Java多线程编程
梦中的梦
博客等级 码龄18年 16粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值