Java 字节流
一、输入输出流
输入输出 ------- 读写文件
输入 ------- 从文件中获取数据到自己的程序中,接收处理【读】
输出 ------- 将自己程序中处理好的数据保存到文件中【写】
流 ------- 数据移动的轨迹
二、流的分类
按照数据的移动轨迹分为:输入流 输出流
按照每一次读写/数据量的大小将流分成:字节流 字符流
字节流:每一次可读写一个字节的数据量,一个字节就是8位2进制,可处理任何类型的文
件【文本、图片、视频........】
字符流:每一次可读写一个字符的数据量,一个字符就是16位2进制,只能处理文本类型的
文件
三、字节流相关类的使用
字节输出流 --------- OutPutStream ------- 抽象类 ---------- 不能new --------- 需要找子类
1.FileOutputStream类
构造方法:
FileOutputStream (File file) 通过File 对象创建一个不可追加的字节输出流
FileOutoutStream (File file,boolean append) 通过File 对象创建一个可追加的字节输出流
FileOutoutStream (String name) 通过字符串创建一个不可追加的字节输出流
FileOutoutStream (String name,boolean append) 通过字符串创建一个可追加的字节输出流
public class FileOutputStreamDemo1 {public static void main(String[] args)throws Exception {String path="F:"+File.separator+"test"+File.separator+"student.txt";//字节输出流--OutputStream--抽象类--FileOutputStream//FileOutputStream类的构造方法//FileOutputStream(String name) 通过String对象创建一个不可追加的字节输出流。 //参数String name--表示文件路劲【目标位置】OutputStream out1=new FileOutputStream(path);FileOutputStream out11=new FileOutputStream(path);//FileOutputStream(String name, boolean append)通过String对象创建一个是否追加的字节输出流。//参数1String name--表示文件路劲【目标位置】//参数2boolean append--是否允许追加【true-追加,false-不追加】OutputStream out2=new FileOutputStream(path,true);FileOutputStream out22=new FileOutputStream(path,true);//推荐使用File file=new File(path);//FileOutputStream(File file) 通过File对象创建一个不可追加的字节输出流。 //参数File file--表示文件路劲【目标位置】OutputStream out3=new FileOutputStream(file);FileOutputStream out33=new FileOutputStream(file);//FileOutputStream(File file, boolean append) 通过File对象创建一个是否追加的字节输出流。//参数1File file--表示文件路劲【目标位置】//参数2boolean append--是否允许追加【true-追加,false-不追加】OutputStream out4=new FileOutputStream(file,true);FileOutputStream out44=new FileOutputStream(file,true);}
}
实例方法:
void write (byte[ ] b) 将b.length个字节从字节数组写入此文件输出流
void write (byte[ ] b,int off , int len) 将 len字节从位于偏移量 off的指定字节数组写入
void write (int b) 将指定的字节写入此文件输出流
void close( ) 关闭文件输出流并释放与此相关的任何系统资源
public class TestFileOutputStream {public static void main(String[] args) throws Exception{String filepath = "F:"+ File.separator+"wangxinghomework"+File.separator+"20230902"+File.separator+"test.txt";File file = new File(filepath);FileOutputStream fileOutputStream = new FileOutputStream(file,true);String data = "hello,zhaomin";byte bytearray[] = data.getBytes();fileOutputStream.write(bytearray);fileOutputStream.close();
//fileOutputStream.write(bytearray,5,8);fileOutputStream.write(97);fileOutputStream.close();}
}
2. 字节输入流 ------ InputStream ------ 抽象类 ------- 不能new ------- 找子类
FileInputStream 构造方法:
FileInputStream(File file) 通过File对象创建一个字节输入流
FileInputStream(String name) 通过String对象创建一个字节输入流
public class TestFileInputStream {public static void main(String[] args) throws Exception{
// FileInputStream类构造方法:
// FileInputStream(File file) 通过File对象创建一个字节输入流
// FileInputStream(String name) 通过String对象创建一个字节输入流String filepath = "F:"+ File.separator+"wangxinghomework"+File.separator+"20230902"+File.separator+"test.txt";File file = new File(filepath);FileInputStream fileInputStream = new FileInputStream(file);FileInputStream fileInputStream1 = new FileInputStream(filepath);}
}
FileInputStream 实例方法:
int read () 从该输入流读取一个字节的数据 ,返回值:读取到的具体字节数据的int型,如果到达文件末尾返回-1
int read (byte[ ] b) 从该输入流读取最多 b.length个字节的数据为字节数组 ,返回值:读取的总字节数, 如果到达文件末尾返回-1
void close() 关闭此文件输入流并释放与流相关联的任何系统资源
public class TestFileInputStream {public static void main(String[] args) throws Exception{String filepath = "F:"+ File.separator+"wangxinghomework"+File.separator+"20230902"+File.separator+"test.txt";File file = new File(filepath);FileInputStream fileInputStream = new FileInputStream(file);//读取一个字节read()int value = fileInputStream.read();String str1 = String.valueOf(value);//转成字符串String类型fileInputStream.close();System.out.println(str1+"ok");// int read(byte[] b) 从该输入流读取最多 b.length个字节的数据为字节数组//定义一个字节型数组,用来保存读出的数据byte bytearray[] = new byte[(int) file.length()];//定义一个临时保存读取来的数据int temp = 0;//定义一个数组下标int index = 0;while ((temp=fileInputStream.read()) != -1){bytearray[index] = (byte)temp;index++;}String str = new String(bytearray);System.out.println(str);fileInputStream.close();}
}
3.DataOutputStream
DataOutputStream 构造方法:
DataInputStream(InputStream in) 创建使用指定的底层InputStream的DataInputStream
DataOutputStream 实例方法:
| void writeBoolean(boolean v) | 将 boolean写入底层输出流作为1字节值 |
| void writeByte(int v) | 将 byte作为1字节值写入底层输出流 |
| void writeChar(int v) | 将 char写入底层输出流作为2字节值,高字节优先 |
| void writeDouble(double v) | 双参数传递给转换 long使用 doubleToLongBits方法在类 Double,然后写入该 long值基础输出流作为8字节的数量,高字节 |
| void writeFloat(float v) | 浮子参数的转换 int使用 floatToIntBits方法在类 Float ,然后写入 该 int值基础输出流作为一个4字节的数量,高字节。 |
| void writeInt(int v) | 将底层输出流写入 int作为四字节,高位字节 |
| void writeLong(long v) | 将 long写入底层输出流,为8字节,高字节为首 |
| void writeShort(int v) | 将 short写入底层输出流作为两个字节,高字节优先 |
| void writeUTF(String str) | 使用 modified UTF-8编码以机器无关的方式将字符串写入基础输出流 |
| void flush() | 刷新此数据输出流 |
| void close() | 关闭此输出流并释放与此流相关联的任何系统资源 |
package com.homework.inouttest;import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;public class TestDataOutputStream {public static void main(String[] args) throws Exception{//构造方法//DataOutputStream(OutputStream out) 创建一个新的数据输出流,以将数据写入指定的底层输出流。String filepath = "F:"+ File.separator+"wangxinghomework"+File.separator+"20230902"+File.separator+"test1.txt";File file = new File(filepath);FileOutputStream out = new FileOutputStream(file,true);DataOutputStream dataOutputStream = new DataOutputStream(out);//DataOutputStream类的实例方法// void writeBoolean(boolean v) 将 boolean写入底层输出流作为1字节值。dataOutputStream.writeBoolean(true);// void writeByte(int v) 将 byte作为1字节值写入底层输出流。dataOutputStream.writeByte(97);// void writeChar(int v) 将 char写入底层输出流作为2字节值,高字节优先。dataOutputStream.writeChar('b');// void writeDouble(double v) 双参数传递给转换 long使用 doubleToLongBits方法在类 Double , 然后写入该 long值基础输出流作为8字节的数量,高字节。dataOutputStream.writeDouble(16.2);// void writeFloat(float v) 浮子参数的转换 int使用 floatToIntBits方法在类 Float ,然后写入 该 int值基础输出流作为一个4字节的数量,高字节。dataOutputStream.writeFloat(17.2f);// void writeInt(int v) 将底层输出流写入 int作为四字节,高位字节。dataOutputStream.writeInt(23);// void writeLong(long v) 将 long写入底层输出流,为8字节,高字节为首。// void writeShort(int v) 将 short写入底层输出流作为两个字节,高字节优先。// void writeUTF(String str) 使用 modified UTF-8编码以机器无关的方式将字符串写入基础输出流dataOutputStream.writeUTF("wo ai ni");// void flush() 刷新此数据输出流。dataOutputStream.flush();// void close() 关闭此输出流并释放与此流相关联的任何系统资源。dataOutputStream.close();}
}
4.DataInputStream类
DataInputStream类构造方法
DataInputStream(InputStream in)创建使用指定的底层InputStream的DataInputStream。
DataInputStream类实例方法
| boolean readBoolean() |
| byte readByte() |
| char readChar() |
| double readDouble() |
| float readFloat() |
| int readInt() |
| long readLong() |
| short readShort() |
| String readUTF() |
| void close() |
package com.homework.inouttest1;import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;public class TestDataInputStream {public static void main(String[] args) throws Exception{//构造方法//DataInuptStream(InputStream in)String filepath = "F:"+ File.separator+"wangxinghomework"+File.separator+"20230902"+File.separator+"test1.txt";File file = new File(filepath);FileInputStream inputStream = new FileInputStream(file);DataInputStream dataInputStream = new DataInputStream(inputStream);//实例方法//boolean readBoolean()boolean flag = dataInputStream.readBoolean();//byte readByte()byte byt = dataInputStream.readByte();// char readChar()char cha = dataInputStream.readChar();// double readDouble()double dou = dataInputStream.readDouble();// float readFloat()float flo = dataInputStream.readFloat();// int readInt()int in = dataInputStream.readInt();// long readLong()// short readShort()// String readUTF()String str = dataInputStream.readUTF();// void close()dataInputStream.close();System.out.println(flag+","+byt+","+cha+","+dou+","+flo+","+in+","+str);}
}
优点:可以直接写出基本数据类型的数据和String,且不需要转换成字节数组
缺点:保存到文件中的数据是乱码
5.序列化
将一个java对象转换成2进制流数据过程,因为我们做操作的java对象可能需要在多台计算机之间传递
如何实现序列化?
(1).为被序列化的java对象的生成类实现一个序列化接口【Serializable】
public interface Serializable特殊----该接口中一个方法都没有,类的序列化由实现java.io.Serializable接口的类启用。不实现此接口的类将不会使任何状态序列化或反序列化。
可序列化类的所有子类型都是可序列化的。
(2).通过java提供ObjectOutputStream类的writeObject(Object obj)
ObjectOutputStream的构造方法
ObjectOutputStream(OutputStream out) 创建一个写入指定的OutputStream的ObjectOutputStream。
实例方法
void writeObject(Object obj) 将指定的对象写入ObjectOutputStream。
6.反序列化
将2进制流数据转换成java对象的过程,需要ObjectInputStream类的Object readObject()方法读取对象
ObjectInputStream类的构造方法
ObjectInputStream(InputStream in)
ObjectInputStream类的实例方法
Object readObject() 从ObjectInputStream读取一个对象
package com.homework.inouttest1;import java.io.Serializable;public class Student implements Serializable {//实例方法,测试用public void learn(){System.out.println("Student类的实例方法");}
}
package com.homework.inouttest;import com.homework.inouttest1.Student;import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;//ObjectOutputStream(Object obj)
public class ObjectOutTest {public static void main(String[] args) throws Exception{String filepath = "F:"+ File.separator+"student.txt";File file = new File(filepath);FileOutputStream outputStream = new FileOutputStream(file);ObjectOutputStream out = new ObjectOutputStream(outputStream);Student student = new Student();out.writeObject(student);out.close();outputStream.close();}
}
package com.homework.inouttest1;import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;public class ObjectInputTest {public static void main(String[] args) throws Exception{String filepath = "F:"+ File.separator+"student.txt";File file = new File(filepath);FileInputStream fileInputStream = new FileInputStream(file);ObjectInputStream in = new ObjectInputStream(fileInputStream);Object objstudent=in.readObject();Student studentst = (Student)objstudent;in.close();fileInputStream.close();studentst.learn();}
}
从D盘复制jpg类型文件到H盘
package com.homework.inouttest;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;public class CopyTest {public static void main(String[] args)throws Exception {//定义D盘路径String filepath = "D:"+ File.separator;//创建文件对象File file = new File(filepath);//获取D盘所有文件名称File myfilelist[] = file.listFiles();for (File d_file:myfilelist) {String filename = d_file.getName();int houzhui = filename.lastIndexOf(".");if (houzhui != -1){String houzhuiname = filename.substring(houzhui);if (houzhuiname.equals(".jpg")) {//拼接文件路径String jpgpath = filepath + filename;FileInputStream fileInputStream = new FileInputStream(jpgpath);//定义H盘路径String newpath = "H:"+filename;File newfile = new File(newpath);FileOutputStream fileOutputStream = new FileOutputStream(newfile);int temp = 0;while ((temp = fileInputStream.read()) != -1) {fileOutputStream.write(temp);}fileInputStream.close();fileOutputStream.close();}}}}
}
相关文章:
Java 字节流
一、输入输出流 输入输出 ------- 读写文件 输入 ------- 从文件中获取数据到自己的程序中,接收处理【读】 输出 ------- 将自己程序中处理好的数据保存到文件中【写】 流 ------- 数据移动的轨迹 二、流的分类 按照数据的移动轨迹分为:输入流 输出流…...
华硕电脑怎么录屏?分享实用录制经验!
“华硕电脑怎么录屏呀,刚买的笔记本电脑,是华硕的,自我感觉挺好用的,但是不知道怎么录屏,最近刚好要录一个教程,怎么都找不到在哪里录制,有人能教教我吗?” 随着电脑技术的不断发展…...
python学习--python的异常处理机制
try…except try:n1int(input(请输入一个整数))n2int(input(请输入另一个整数))resultn1/n2print(结果为,result) except ZeroDivisionError: print(除数不能为0)try…except…else 如果try块中没有抛出异常,则执行else块,如果try中抛出异常࿰…...
nacos+Dubbo整合快速入门
官网:Nacos Spring Boot 快速开始 下载下载链接启动:进入bin目录,startup.cmd -m standalone引入依赖 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.0.9…...
QT实现钟表
1、 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QPaintEvent> //绘制事件类 #include <QDebug> //信息调试类 #include <QPainter> //画家类 #include <QTimerEve…...
准备我们心爱的IDEA写Jsp
JSP学习 一、准备我们心爱的IDEA new一个项目:New Project --> Next -->Next -->Finsh 二、配置好服务器Tomcat-9.0.30 1.> 在WEB-INF下创建一个Lib包 将jsp-api.jar复制进去,并使其生效 未生效前: 生效过程: 2.>…...
将近 5 万字讲解 Python Django 框架详细知识点(更新中)
Django 框架基本概述 Django 是一个开源的 Web 应用后端框架,由 Python 编写。它采用了 MVC 的软件设计模式,即模型(Model)、视图(View)和控制器(Controller)。在 Django 框架中&am…...
Arcgis提取每个像元的多波段反射率值
Arcgis提取每个像元的多波段反射率值 数据预处理 数据预处理阶段需要对遥感图像进行编辑传感器参数、辐射定标、大气校正、正射校正,具体流程见该文章 裁剪研究区 对于ENVI处理得到的tiff影像,虽然是经过裁剪了,但是还存在黑色的背景值&a…...
JavaScript面试题整理(一)
数据类型篇 1、JavaScript有哪些数据类型,它们的区别是什么? 基本数据类型:number、string、boolean、undefined、NaN、BigInt、Symbol 引入数据类型:Object NaN是JS中的特殊值,表示非数字,NaN不是数字…...
数据结构:树和二叉树之-堆排列 (万字详解)
目录 树概念及结构 1.1树的概念 1.2树的表示 编辑2.二叉树概念及结构 2.1概念 2.2数据结构中的二叉树:编辑 2.3特殊的二叉树: 编辑 2.4 二叉树的存储结构 2.4.1 顺序存储: 2.4.2 链式存储: 二叉树的实现及大小堆…...
爬虫入门基础:深入解析HTTP协议的工作过程
目录 一、HTTP协议简介 二、HTTP协议的工作过程 三、请求方法与常见用途 四、请求头与常见字段 五、状态码与常见含义 六、进阶话题和注意事项 总结 在如今这个数字化时代,互联网已经成为我们获取信息、交流和娱乐的主要渠道。而在互联网中,HTTP协…...
k8备份与恢复-Velero
简介 Velero 是一款可以安全的备份、恢复和迁移 Kubernetes 集群资源和持久卷等资源的备份恢复软件。 Velero 实现的 kubernetes 资源备份能力,可以轻松实现 Kubernetes 集群的数据备份和恢复、复制 kubernetes 集群资源到其他kubernetes 集群或者快速复制生产环境…...
基于Python开发的火车票分析助手(源码+可执行程序+程序配置说明书+程序使用说明书)
一、项目简介 本项目是一套基于Python开发的火车票分析助手,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,…...
旺店通·企业奇门与金蝶云星空对接集成订单查询连通销售订单新增(旺店通销售-金蝶销售订单-小红书)
旺店通企业奇门与金蝶云星空对接集成订单查询连通销售订单新增(旺店通销售-金蝶销售订单-小红书) 接通系统:旺店通企业奇门 慧策最先以旺店通ERP切入商家核心管理痛点——订单管理,之后围绕电商经营管理中的核心管理诉求,先后布局流量获取、会…...
卡尔曼滤波应用在数据处理方面的应用
卡尔曼滤波应用到交通领域 滤波器介绍核心思想核心公式一维卡尔曼滤波器示例导入所需的库 滤波器介绍 卡尔曼滤波器是一种用于估计系统状态的数学方法,它以卡尔曼核心思想为基础,广泛应用于估计动态系统的状态和滤除测量中的噪声。以下是卡尔曼滤波器的核…...
PROFIBUS主站转ETHERCAT协议网关
产品介绍 JM-DPM-ECT是自主研发的一款PROFIBUS-DP主站功能的通讯网关。该产品主要功能是将各种PROFIBUS-DP从站接入到ETHERCAT网络中。 本网关连接到PROFIBUS总线中作为主站使用,连接到ETHERCAT总线中作为从站使用。 产品参数 技术参数 ◆ PROFIBUS-DP/V0 协议符…...
Vue路由的使用及node.js下载安装和环境搭建
目录 一、Vue路由 1.1 简介 ( 1 ) 特点 ( 2 ) 作用 1.2 实例 ( 1 ) 引入 ( 2 ) 组件 ( 3 ) 关系 ( 4 ) 路由 ( 5 ) 事件 ( 6 ) 锚点 二、nodeJS 2.1 下载 2.2 安装 2.3 环境搭建 新增 添加 测试 配置 运行 一、Vue路由 1.1 简介 Vue路由是Vue.…...
【算法训练-二叉树 三】【最大深度与直径】求二叉树的最大深度、求二叉树的直径
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【求二叉树的直径】,使用【二叉树】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件…...
查看linux是centos还是Ubuntu
查看linux是centos还是Ubuntu 命令:cat /etc/os-release...
win10怎么关闭自动更新,这个方法你知道吗?
Windows 10 操作系统自动更新是确保系统安全性和性能的关键功能。然而,有时用户可能希望手动控制更新,因此关闭自动更新可能是一个有用的选项。在本文中,我们将介绍win10怎么关闭自动更新的两种方法,以满足用户不同的需求。 方法1…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
