ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流

学Simulink——基于大数据处理与云计算的场景实例:无人机与云计算中心之间的高效数据传输链路设计 本文以无人机与云计算中心的高效数据传输链路设计为例,手把手指导使用Simulink进行系统级建模。针对智慧城市、灾害监测等场景中无人机采集的海量数据(视频、图像、点云等),构建包含数据源、传输协议、无线链路、云接入和性能分析的五层架构模型。通过智能数据压缩、多链路聚合和QoS优先级调度等关键技术,实现5G+Wi-Fi等多通信技术的自适应切换。仿真结果表明,5G+Wi-Fi链路聚合在城市环境中表现最优,而4G+卫星组合适合偏远地区。该模型为无人机实时数据传输提供了有效的设计方法和优化方向,可拓展至边缘计算、A 阅读详情
1.对象流
复制代码
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
 
public class ObjectStreamDemo implements Serializable {
public static void main(String[] args) {
test3();
}
 
class Person implements Serializable {
String name = "";
int score = 0;
 
public String getName() {
return name;
}
 
public void setName(String name) {
this.name = name;
}
 
public int getScore() {
return score;
}
 
public void setScore(int score) {
this.score = score;
}
 
@Override
public String toString() {
return "Person [name=" + name + ", score=" + score + "]";
}
 
}
 
/**
* 向 一个文本文件中写入一个对象
*/
private static void test1() {
 
File file = new File("./PerObjectStoreTxt.txt");
FileOutputStream fos = null;
 
// 创建 ObjectOutputStream 构造器中传入一个OutputStream对象
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(file);
 
// 创建 ObjectOutputStream 构造器中传入一个OutputStream对象
oos = new ObjectOutputStream(fos);
 
oos.writeObject(new ObjectStreamDemo().new Person());
 
Person p2 = new ObjectStreamDemo().new Person();
p2.setName("张三");
p2.setScore(100);
 
oos.writeObject(p2);
 
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (oos != null)
try {
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
}
}
 
/**
* 从一个文本文件 读取多个对象
*
* @throws
*/
private static void test2() {
File file = new File("./PerObjectStoreTxt.txt");
Person p1;
Person p2;
InputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
 
p1 = (Person) ois.readObject();
p2 = (Person) ois.readObject();
System.out.println(p1);
System.out.println(p2);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ois != null)
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
 
}
}
/**
* 完成 对象的深克隆
*/
private static void test3() {
 
Person p1=new ObjectStreamDemo().new Person();
String pName =new String("张三");//最终看这个东西的指向是否还一样
p1.setName(pName);
/**
*由此可以看出 ByteArrayIOStream 还是有点用的 主要就是继承IOStream这点
* 有了这点 这个东西 就分别可以作为 ObjectIIOStream的构造器参数传入
* 因为 ObjectInputStream(InputStream is) ObjectOutputStream(OutputStream)
* 他俩就提供 这么 两个东西
*/
ByteArrayOutputStream baos =null;
ByteArrayInputStream bais=null;
ObjectOutputStream oos=null;
ObjectInputStream ois=null;
 
 
 
try {
baos=new ByteArrayOutputStream();
oos=new ObjectOutputStream(baos);
 
 
oos.writeObject(p1);
/**
*如何完成 ByteArrayOutputStream 和ByteArrayInputStream 东西的交互?
*
* 实际上这两个东西 只是继承的东西不一样 底层其他基本一样:
* 实际上 这两个东西 都要 自己手动支取:
* ByteArrayOutputStream() 写进去数组还能 用toString toByteArray拿出来
* ByteArrayInputStream(byte[] b) 还需要传byte[]进去 ,可见这个东西古老
*/
 
bais=new ByteArrayInputStream(baos.toByteArray());
ois=new ObjectInputStream(bais);
 
//获取深克隆
Person p2=(Person)ois.readObject();
System.out.println(p2);
//修改 克隆对象里边的 成员对象
p2.name="lisi";
//看原对象的 成员对象是否更改
System.out.println(p1);
//再看 这个被克隆的对象 是否被更改
System.out.println(p2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
 
try {
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ois.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
 
}
 
}
}
复制代码

 

 
 
2.内存流 /数组流  :
     其实就是一个纯数组操作!
这个东西 和AbstractStringBuilder 区别不大 ,就这么3个区别:
  1. ByteArrayOutputStream  存的是byte[]  
  2. 具有 write到其他OutputStream 的方法 
  3. 还有就是没有CAPACITY
 
复制代码
public class ByteArrayOutputStream extends OutputStream{
 
    protected byte buf[];   
    protected int count;
 
  //ByteArray写入流有两个 构造器 传入默认的数组容量参数
 //而ByteAarry写出流 因为一旦放进去 就不允许更改,所以只有一个传byte[]
    public ByteArrayOutputStream() {
       this(32);
    }
    public ByteArrayOutputStream(int size) {
        if (size < 0) {
            throw new IllegalArgumentException("Negative initial size: "
                                               + size);
        }
   buf = new byte[size];
    }
 
  
    public synchronized void write(int b) {
   int newcount = count + 1;
   if (newcount > buf.length) {
            buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newcount));
   }
   buf[count] = (byte)b;
   count = newcount;
    }
 
  
    public synchronized void write(byte b[], int off, int len) {
   if ((off < 0) || (off > b.length) || (len < 0) ||
            ((off + len) > b.length) || ((off + len) < 0)) {
       throw new IndexOutOfBoundsException();
   } else if (len == 0) {
       return;
   }
        int newcount = count + len;
        if (newcount > buf.length) {
            buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newcount));
        }
        System.arraycopy(b, off, buf, count, len);
        count = newcount;
    }
 
 
public synchronized void writeTo(OutputStream out) throws IOException {
 
 
//重新 写入新的 输出流   这个类这么一搞算是废了
     out.write(buf, 0, count);
    }
 
   
    public synchronized void reset() {
   count = 0;
    }
    public synchronized byte toByteArray()[] { //这写法6
        return Arrays.copyOf(buf, count);
    }
    public synchronized int size() {
   return count;
    }
 
 
    public synchronized String toString() {
   return new String(buf, 0, count);
    }
   
    public synchronized String toString(String charsetName)
   throws UnsupportedEncodingException
    {
   return new String(buf, 0, count, charsetName);
    }
 
    public synchronized String toString(int hibyte) {
   return new String(buf, hibyte, 0, count);
    }
  
      //这个 两个流是直接 写入内存的  内存管理 会进行回收处理
      //所以不需要手动关流    这个 close()方法也就是空的
public void close() throws IOException {
    }
 
}
复制代码

 

  所以说这个东西最大的作用就是ByteArrayOutputStream 和ByteArrayInputStream 分别是OutputStream 和InputStream 的子类 如果要用到对象流传进去会方便一些。
 
 
如果说要把 ByteArrayOutputStream的东西拿出来 两招 直接toString() 或者说 getBytes()
 
3.压缩流
压缩流 是用来 把一个文件 写进一个压缩包里。
这个流 不在 io包下 它是在 java.util.zip
如果我们要传输一个较大的文件 那么就要使用压缩技术
 
 
简单传达一下 这里边的东西 :就这么三个东西
 
 
ZipInputStream 解压工具
 
ZipOutputStream 压缩工具
 
ZipEntry代表的是压缩包中的一个文件实体。
 
 
如何压缩文件
直接用ZipIO流去包装IO流
比如说直接用ZipOutputStream 去包装 FileOutputStream 对象
 
 
复制代码
package ZipOutputStreamDemo;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 
public class ZipOutputStreamDemo {
public static void main(String[] args) {
test1();
}
 
/**
* 创建 .zip文件 把这个文件封装到ZipFile对象里 直接用ZipOutPutStream 把要写的文件写进去就OK了
*/
// 把文件 1.txt demo.class 实例.PNG 写入 压缩包 one.zip
private static void test1() {
File zipFile = new File("C:/Users/zongjihengfei/Desktop/one.rar/");
// 无论存在与否 先把它创建出来
try {
zipFile.createNewFile();
} catch (IOException e1) {
e1.printStackTrace();
}
FileOutputStream fos = null;
ZipOutputStream zos = null;
 
// 拿到 一个文件
File file = new File("./1.txt");
// 用 文件输入流 去获取把 文件内容 读取进来
FileInputStream fis = null;
 
try {
fos = new FileOutputStream(zipFile);
// ZipOutputStream(OutputStream os)
zos = new ZipOutputStream(fos);
fis = new FileInputStream(file);
int hasRead = 0;  
 
/**
* ZipOutputStream 对象 是由文件条目构成的 也就是说 你每添加一个条目 再往里边写 写的内容就是给这个条目
*
* 条目 文件名 在 new ZipEntry(String Name)写上 条目内容 每添加一个条目就写哪个文件
*/
zos.putNextEntry(new ZipEntry(file.getName()));  //首先要增加条目才能往这个条目里边写
 
byte[] b = new byte[1024];   //最大吞吐量
while ((hasRead = fis.read(b)) != -1) {
zos.write(b, 0, hasRead);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
 
try {
zos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
}
 
}
}
复制代码

 

 
 
 
 
 
科研牛马千万不要错过!手把手教你用AI精准匹配真实参考文献,仅需一个专业应用+两个提示词指令 当然也可以借助生成式AI,如GPT-5.2、Gemini 3 Pro粘贴段落,输入设计好的提示词,让模型根据段落内容匹配参考文献,并正确引用到段落合适位置,再按规范格式输出参考文献列表。阅读我提供的【正文文本】,为其中的关键论点寻找真实的、权威的参考文献(优先来源于Nature, Science, IEEE, ACM, PubMed等),并插入引用。若在段落中已经引用好了参考文献,也有参考文献列表,担心引用位置不当或论点、论述逻辑与文献不够契合,则可以用以下结构化提示词,让AI辅助审查。 阅读详情

相关推荐

Linux中断子系统分析之(四):驱动程序申请中断

中断子系统中有一个重要的设计机制,那就是Top-half和Bottom-half,将紧急的工作放置在Top-half中来处理,而将耗时的工作放置在Bottom-half中来处理。 如果中断不分上下半部处理,那么意味着只有等上一个中断完成处理后才会打开中断,下一个中断才能得到响应。当某个中断处理处理时间较长时,很有可能就会造成其他中断丢失而无法响应,影响系统性能。 中断分成上下半部处理可以提高中断的响应能力,在上半部处理完成后便将中断打开,这样就可以响应其他中断了,等到中断退出的时候再进行下半部的处理。为了进

m0_46525308的博客 1229

ByteArrayOutputStream和ZipOutputStream 怎么联合使用

可以使用 ByteArrayOutputStream 和 ZipOutputStream 来将一个字节数组压缩成一个 zip 文件。 首先, 使用 ByteArrayOutputStream 将需要压缩的数据写入字节数组输出流中。 然后, 使用 ZipOutputStream 将该字节数组输出流包装成压缩流, 并调用 ZipOutputStream 的 putNextEntry 方法来创建压缩文件...

weixin_42596011的博客 794

保姆级教程:在树莓派5B上用AI Kit跑YOLOv8,实测134fps的完整配置流程

本文提供了一份详细的树莓派5B搭配AI Kit部署YOLOv8的教程,从硬件组装到模型转换、优化和部署,最终实现134FPS的高帧率推理性能。通过Hailo-8L AI加速模块和HEF模型转换,这套方案为边缘AI计算提供了强大支持,适用于智能监控、无人机视觉导航等应用场景。

weixin_28725407的博客 450

用ByteArrayOutPutStream和ZipOutputStream实现压缩形成二进制,方便网络传输

代码如下: public class Test1 { public static void main(String[] args) { try { zip(); } catch (IOException e) { e.printStackTrace(); } } public static void zip() throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ZipOutputStr

jiamaa的博客 2048

安装m_map以及用matlab绘制高精度海岸线地图

#如何用matlab绘制高精度海岸线地图

qq_38512775的博客 1万+

手把手教你绕过网易易盾验证码:滑块、点选、语序全攻略

本文深度解析了以网易易盾为代表的现代验证码技术,重点探讨了滑块、点选、语序及空间推理等交互式验证码的工作原理与对抗策略。文章从行为验证和空间推理的核心逻辑出发,剖析了验证码交互的数据流与关键参数,并提供了模拟人类行为轨迹、维护设备指纹等工程实践方法,旨在帮助开发者在合规前提下设计更健壮的自动化流程。

3c4x5z6v7b的博客 710

Java ZipOutputStream转ByteArrayOutputStream进行下载

可以使用 ByteArrayOutputStream 和 ZipOutputStream 将文件压缩成 zip 格式并转换成字节数组进行下载。 下面是示例代码: ByteArrayOutputStream byteArrayOutputStream =new ByteArrayOutputStream(); ZipOutputStream zipOutputStream = new ZipOutp...

weixin_35749796的博客 2149

C#实现OPC客户端与S7-1200 PLC通信:工控场景稳定通信的实战指南(附完整代码)

标准化优先:OPC UA是工业通信的标准,相比直接通信,更适合多设备集成的工控场景;稳定性第一:必须封装断线重连、异常处理、资源释放逻辑,满足7×24小时运行需求;效率优化:高频采集场景优先用批量读写,避免单个变量频繁请求;细节把控:节点ID、变量类型、端口配置等细节是新手最容易踩坑的地方,建议先用UA Expert验证。这套代码和方案已在多个工业项目中落地,从单台S7-1200到多台S7-1200/1500集群,都能稳定运行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1041

Java ZipOutputStream压缩多个文件转ByteArrayOutputStream进行下载

可以使用Java的ZipOutputStream类来压缩多个文件,然后将压缩后的内容写入ByteArrayOutputStream中。接着可以使用ByteArrayOutputStream的toByteArray()方法获取压缩后的字节数组,并将其作为响应进行下载。 示例代码如下: List<File> filesToZip =Arrays.asList(new File("file1...

weixin_42593130的博客 1463

图解电动汽车:电动汽车的分类

前面《电动汽车简介》中简单介绍了电动汽车的分类,主要包括混合动力电动汽车(HEV)和纯电动汽车(BEV)两大类。其中,混合动力汽车又可分为非插电式混合动力汽车、插电式混合动力汽车(PHEV)以及增程式电动汽车(REEV)。 主要分类 简单来说,各类电动汽车的特点如下。 纯电动汽车(BEV)就是指动力来源完全由电能提供,由电动机驱动的汽车,并且电能储存在电池中。 混合动力汽车(HEV)则是指动力来源可以是化石燃料,也可以是电能,并且电能除了可以存储在电池中,还可以由化石能源转化而来。 非插电式混合动力汽车

程序员「阿基米东」的编程之旅 3090

[Bug已解决] CUDA error 尽管 CUDA 可用且 GPU 受支持-通用排查 RuntimeError 解决方案

[Bug已解决] CUDA error 尽管 CUDA 可用且 GPU 受支持-通用排查 RuntimeError 解决方案

一键难忘的博客 2416

使用java.util.zip对生成的ByteArrayOutputStream(字节数组输出文件流)进行打包压缩(单个、批量),并返回压缩包文件的字节数组输出文件流用于(文件不落地)下载

package gov.test.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.zip.ZipEntr...

默默同学的BLOG 9247

Vulkan入门系列0- Vulkan与OpenGL的区别

虽然Vulkan和OpenGL都是对GPU的抽象,都能达到相同的功能,但它们的设计理念不同,可以说设计差异是非常之大,由于OpenGL从1992年到现在,已经有30多年的历史,GPU功能日新月异,与当年不可同日而语,在OpenGL保持向下兼容情况下,还要在OpenGL基础上设计一套编程接口显然是不可能的,所以推出了新编程规范Vulkan。另外在一些无窗口的应用中,Vulkan可以有选择的不创建帧缓冲区,比如在数学运算,物理模拟,处理视频流的应用中并不需要窗口,所以Vulkan支持更灵活的应用场景。

GPU全栈博主 4071

将文件压缩为字节数组

package io.renren.modules.email.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import...

liyagangcsdn的博客 1357

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

如何不落地文件使用压缩流ZipOutputStream的一些操作

Java 文件压缩方面的知识

weixin_39831786的博客 1830

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java在内存中将普通文件打包成zip文件

Java在内存中将普通文件打包成zip文件

shika1234的博客 1007

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

关于导出zip压缩包 以及相关流解释

【代码】关于导出zip压缩包 以及相关流解释。

Gzq 817

Java ZipOutputStream 的使用,实现压缩文件

Java ZipOutputStream 的使用,实现压缩文件

shijialeya 6375

ByteArrayOutputStream的用法

<br />字节数组流:<br />ByteArrayOutputStream:    可以捕获内存缓冲区的数据,转换成字节数组。<br /> ByteArrayoutputStream bout=new ByteArrayOutputStream();<br /> bout.write(int a);  bout.write(int b);  bout.write(int c);<br /> byte[] buf=bout.toByteArray();//获取内存缓冲中的数据<br /> for(int

小马过河 1943

Java调用GZIP对数据进行压缩和解压缩

【代码】Java调用GZIP对数据进行压缩和解压缩。

someby的博客 3586

数据压缩算法的介绍-Java实现-对比

1 前言 在RPC通信数据的传输场景下,当通信报文数据传输较大时,会对数据包进行压缩传输,根据不同传输场景,常用的压缩算法有Zlib、Gzip、Bzip2、Deflater、Lz4、Lzo、Snappy算法等。以下将包括算法的介绍、Java实现代码以及各算法间的模拟性能对比。 2 压缩方案 Zlib bzip2是Julian Seward开发并按照自由软件/开源软件协议发布的数据压缩算法及程序。对于压缩和解压缩,没有数据长度的限制,bzip2比传统的gzip的压缩效率更高,但是它的压缩速度较慢

我要学Java_blog 1382

java压缩文件流解压出错

压缩文件流解压出错

todd的博客 1907

c++ 类数组_输入输出流IO体系及常用类关系结构(精要收藏)

1、IO体系Java IO 体系看起来类很多,感觉很复杂,但其实是 IO 涉及的因素太多了。在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,所以会给人一种很乱的感觉,并且还有设计模式的使用,更加难以使用这些 IO 类,所以特地对 Java 的 IO 做一个总结。IO 类设计出来,肯定是为了解决 IO 相关的操作的,想一想哪里会有 IO 操作?网络、磁盘。网络操作相关的类是在 java.n...

weixin_39746282的博客 334

GZIPOutputStream与ByteArrayOutputStream共同使用注意事项

GZIPOutputStream与ByteArrayOutputStream共同使用时,先把数据存到baos,再写入文件,出现了以下错误 java.io.EOFException : Unexpected end of ZLIB input stream at java.util.zip.InflaterInputStream.fill( InflaterInputStream....

李小佳的博客 2163

反射,枚举

目录 1. io 1.1 字节数组流 1.1.1 输入流 1.1.2 输出流 1.1.3 拷贝 1.2 数据流 1.2.1 输入流 1.2.2 输出流 1.2.3 拷贝 1.3 对象流 1.3.1 序列化输出流 1.3.2 反序列化输入流 2. 反射(reflection) 2.1 获取对象 2.2 获取构造器 2.3 获取属性(字段) 2.4获取方法 2.5...

一只蚊子学Java 403

java 多重压缩_Java打多重zip压缩包 -- ByteArrayOutputStream结合org.apache.commons.compress来实现...

File f1 = newFile("C:/boot.ini");File f2 = new File("C:/NTDETECT.COM");final ByteArrayOutputStream baos =new ByteArrayOutputStream() ;//changed @ 2009年7月21日8:37:41//ArchiveOutputStream ostemp = newArc...

weixin_27890975的博客 393
上一篇: 基于java的InputStream.read(byte[] b,int off,int len)算法学习!
下一篇: BufferedInputStream与BufferedOutputStream用法简介
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值