当前位置: 首页 > news >正文

Java流的体系结构(二)

文章目录

  • 一、对象流的使用
    • 1.概念
    • 2.序列化机制
    • 3.代码案例:序列化过程:将内存中的java对象保存到磁盘中或通过通络传输出去
    • 4.反序列化,将磁盘文件中的对象还原为内存中的一个java对象
  • 二、RandomAccessFile的使用
    • 1.说明
    • 2.代码案例


提示:以下是本篇文章正文内容,下面案例可供参考

一、对象流的使用

1.概念

1.ObjectInputStream和ObjectOutputStream
2.作用:用于存储和读取基本数据类型数据或对象的处理流
3.要想一个java对象是可序列化的,需要满足相应的要求。

1.需要实现接口:Serializable
2.当前类提供一个全局常量:serialVersionUID
3.处理当前Person类需要实现Serializable接口之外,还必须保证其内部所有属性也必须是可序列化的(默认情况下,基本数据类型可序列化)补充:.ObjectInputStream和ObjectOutputStream不能序列化static和transient修饰的成员变量。

2.序列化机制

对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。

3.代码案例:序列化过程:将内存中的java对象保存到磁盘中或通过通络传输出去

//序列化过程:将内存中的java对象保存到磁盘中或通过通络传输出去//使用ObjectOutputStream实现@Testpublic void testObjectOutputStream(){ObjectOutputStream oos = null;try{oos = new ObjectOutputStream(new FileOutputStream("object.dat"));oos.writeObject(new String("我爱北京天安门"));oos.flush();  //刷新操作oos.writeObject(new Person("姚玛丽",21));oos.flush();}catch (IOException e){e.printStackTrace();}finally {try{if(oos != null)oos.close();}catch(IOException e){e.printStackTrace();}}}

4.反序列化,将磁盘文件中的对象还原为内存中的一个java对象

@Testpublic void testObjectInputStream(){ObjectInputStream ois = null;try{ois = new ObjectInputStream(new FileInputStream("object.dat"));Object obj = ois.readObject();String str = (String)obj;Person p = (Person)ois.readObject();System.out.println(str);System.out.println(p);}catch(IOException e){e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} finally {try{if(ois != null)ois.close();}catch(IOException e){e.printStackTrace();}}}public class Person implements Serializable {public static final long sericlVersionUID = 45866454556L;private String name;private int age;public void setName(String name){this.name = name;}public String getName(){return this.name;}public String toString(){return "Person{" +"name='"+name+'\''+",age="+age;}public Person(){}public Person(String name,int age){this.name = name;this.age = age;}}

二、RandomAccessFile的使用

1.说明

1.RandomAccessFile直接继承于java.lang.Object类,实现了DataInput和DataOutput接口
2.RandomAccessFile既可以作为一个输入流,又可以作为一个输出流
3.如果RandomAccessFile作为输出流时,写出到的文件如果不存在,则在执行过程中自动创建,如果写出到的文件存在,则会对原有文件内容进行覆盏。(默认情况下,从头覆盖)
4.可以通过相关的操作,实现RandomAccessFile“插入”数据的效果

2.代码案例

public void test1() throws FileNotFoundException {RandomAccessFile raf1 = null;RandomAccessFile raf2 = null;try{raf1 = new RandomAccessFile(new File("2.jpg"),"r");raf2 = new RandomAccessFile(new File("3.jpg"),"rw");byte[] buffer = new byte[1024];int len;while((len = raf1.read(buffer))!=-1){raf2.write(buffer,0,len);}}catch (IOException e){e.printStackTrace();}finally {if(raf1!=null){try{raf1.close();}catch(IOException e){e.printStackTrace();}}if(raf2!=null){try{raf2.close();}catch(IOException e){e.printStackTrace();}}}}
public void test2() throws  IOException{RandomAccessFile raf1 = new RandomAccessFile("hello.txt","rw");raf1.seek(3);  //将指针调到角标为3的位置raf1.write("xyz".getBytes());raf1.close();}
//使用RandomAccessFile实现数据的插入效果@Testpublic void test3() throws  IOException{RandomAccessFile raf1 = new RandomAccessFile("hello.txt","rw");raf1.seek(3);  //将指针调到角标为3的位置//保存指针3后面的所有数据到StringBuilder中StringBuilder builder = new StringBuilder((int)new File("hello.txt").length());byte[] buffer = new byte[20];int len;while((len = raf1.read(buffer)) != -1){builder.append(new String(buffer,0,len));}//调回指针,写入“xyz”raf1.seek(3);raf1.write("xyz".getBytes());//将StringBuilder中的数据写入到文件中raf1.write(builder.toString().getBytes());raf1.close();}

相关文章:

Java流的体系结构(二)

文章目录 一、对象流的使用1.概念2.序列化机制3.代码案例:序列化过程:将内存中的java对象保存到磁盘中或通过通络传输出去4.反序列化,将磁盘文件中的对象还原为内存中的一个java对象 二、RandomAccessFile的使用1.说明2.代码案例 提示&#x…...

python计算阶层

阶层(Factorial)是指从1到一个正整数n的所有整数相乘,即n! 1 2 3 … n。下面是Python代码计算阶层: def factorial(n):"""计算阶层:param n: 正整数:return: n的阶层"""if n 1 or n 0:retu…...

前端架构师之01_ES6_基础

1 初识ES6 简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是实现ECMAScript标准的脚本语言。 2011年,ECMA国际标准化组织在发布ECMAScript 5.1版本之后,就开始着手制定第6版规范。 存在的问题:这个版本…...

银行卡号识别

# 导入工具包 from imutils import contours import numpy as np import argparse import cv2 import myutils# 设置参数 # ap = argparse.ArgumentParser() # ap.add_argument("-i", "--image", required=True, # help="path to input image")…...

【Idea】idea、datagrip设置输入法

https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5https://github.com/RikudouPatrickstar/JetBrainsRuntime-for-Linux-x64/releases/tag/jbr-release-17.0.6b829.5 下载后解压并重命名为 jbr, 然后替换对应 ide…...

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于RF-Adaboost随机森林结合…...

最小生成树 | 市政道路拓宽预算的优化 (Minimum Spanning Tree)

任务描述: 市政投资拓宽市区道路,本着执政为民,节省纳税人钱的目的,论证是否有必要对每一条路都施工拓宽? 这是一个连问带答的好问题。项目制学习可以上下半场,上半场头脑风暴节省投资的所有可行的思路&a…...

Java实现使用多线程,实现复制文件到另一个目录,起不一样的名字,创建100万个数据

目录 1 需求2 实现 1 需求 我现在有一个300MB 的文件,想要根据这个文件,创建100万个大小一样的,名称不一样,如何实现,如何比较快点实现 2 实现 1 先准备好这个文件 2 准备好目录 3 写代码 private static void crea…...

uni-app:canvas-图形实现1

效果 代码 <template><view><!-- 创建了一个宽度为300像素&#xff0c;高度为200像素的canvas元素。canvas-id属性被设置为"firstCanvas"&#xff0c;可以用来在JavaScript中获取该canvas元素的上下文对象。 --><canvas style"width:200p…...

【算法分析与设计】动态规划(下)

目录 一、最长公共子序列1.1 最长公共子序列的结构1.2 子问题的递归结构1.3 计算最优值1.4 举例说明1.5 算法的改进 二、最大子段和2.1 代码2.2 最大子段和问题的分治算法2.3 代码2.4 分治算法的时间复杂度2.5 最大子段和问题的动态规划算法 三、凸多边形最优三角剖分3.1 三角剖…...

计算机图像处理-均值滤波

均值滤波 线性滤波器的原始数据与滤波结果是一种算术运算&#xff0c;即用加减乘除等运算实现&#xff0c;如均值滤波器&#xff08;模板内像素灰度值的平均值&#xff09;、高斯滤波器&#xff08;高斯加权平均值&#xff09;等。由于线性滤波器是算术运算&#xff0c;有固定…...

FreeRTOS入门教程(空闲任务和钩子函数及任务调度算法)

文章目录 前言一、空闲任务概念二、钩子函数概念三、任务调度算法四、任务调度算法实验1.实验代码2.是否抢占3.时间片是否轮转4.空闲任务让步 总结 前言 本篇文章将带大家学习一下什么是空闲任务以及钩子函数&#xff0c;以及学习FreeRTOS中的任务调度算法&#xff0c;了解在F…...

Javascript真的是10天内做出来的吗?

我曾听说&#xff0c;Javascript 之所以有这么多缺点&#xff0c;是因为它的第一个版本是在短短十天内完成的。我很好奇&#xff1a;1&#xff09;这是否属实&#xff1b;2&#xff09;这是否能解释这种语言的缺陷。 经过一番研究&#xff0c;我可以不自信地说&#xff1a;是的…...

picoctf_2018_got_shell

picoctf_2018_got_shell Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000)32位&#xff0c;只开了NX int __cdecl __noreturn main(int argc, const char **argv, const char **envp) {_DWOR…...

作用域 CSS 回来了

几年前&#xff0c;消失的作用域 CSS&#xff0c;如今它回来了&#xff0c;而且比以前的版本要好得多。 更好的是&#xff0c;W3C规范基本稳定&#xff0c;现在Chrome中已经有一个工作原型。我们只需要社区稍微关注一下&#xff0c;引诱其他浏览器构建它们的实现&#xff0c;并…...

简述ceph文件储存系统

Ceph 是一个统一的分布式存储系统和共享机制&#xff0c;它定义了数据如何存储在一个或多个节点上并呈现给其他机器以供文件访问。 Ceph特点 高性能 a. 摒弃了传统的集中式存储元数据寻址的方案&#xff0c;采用CRUSH算法&#xff0c;数据分布均衡&#xff0c;并行度高。 b.考…...

计算机图像处理:椒盐噪声和高斯噪声

图像滤波 图像滤波&#xff0c;即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制&#xff0c;同时会造成图像一定程度上的模糊&#xff0c;这也叫做平滑或者低通滤波。无论是均衡化直方图和图像滤波&#xff0c;都一定程度上降低了图像阈值分割的难度&#xff0c;直…...

SQL SELECT 子查询与正则表达式

在之前的文章中已经探讨了 SQL SELECT 语句的基础和进阶用法,以及如何通过高级技巧来进行更复杂的数据查询和分析。本文将介绍 SQL SELECT 语句中的子查询和正则表达式的使用。这些是 SQL 中非常强大的工具,能让您进行更复杂和精细的数据操作。 文章目录 子查询基础与应用子…...

Package vips was not found in the pkg-config search path的解决方案

出现该问题是因为pkg-config未安装或未成功设置环境变量。 下文是centos下的操作。 前提 先安装C编译环境&#xff1a; yum -y install gcc-c 否则会报错configure: error: no acceptable C compiler found in $PATH 成功后gcc -v会显示版本信息。 下载&安装 pkg-config 传…...

Vue封装全局SVG组件

1.SVG图标配置 1.安装插件 npm install vite-plugin-svg-icons -D 2.Vite.config.ts中配置 import { createSvgIconsPlugin } from vite-plugin-svg-icons import path from path export default () > {return {plugins: [createSvgIconsPlugin({// Specify the icon fo…...

课题学习(二)----倾角和方位角的动态测量方法(基于磁场的测量系统)

磁性测量工具安装在非磁性钻铤内&#xff0c;如图1&#xff0c;以避免磁性随钻测量工具测量时受到外部干扰。 测量系统采用三轴加速度计和三轴磁通门&#xff0c;并采用冗余设计&#xff0c;由于井下振动剧烈&#xff0c;陀螺仪的可靠性将大大降低。为了保证整个钻井过程中系统…...

Docker-Windows安装使用

1.下载docker https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 2.配置虚拟化环境 通过控制面板“设置”启用 Hyper-V 角色 右键单击 Windows 按钮并选择“应用和功能”。选择相关设置下右侧的“程序和功能”。选择“打开或关闭 Windows 功能”。选择“Hyper-…...

在Windows11上安装ubuntu虚拟机

一开始是参考了 VMware17虚拟机安装Ubuntu最新版本(Ubuntu22.04LTS)详细步骤 专栏的1和2来的。但是后面总是提示operating system not found&#xff0c;就参考vmware安装ubuntu时总是提示operating system not found&#xff0c;选择典型安装而不是专栏选择的自定义安装&#…...

【微服务】spring 控制bean加载顺序使用详解

目录 一、前言 二、使用order注解控制顺序 2.1 order 注解使用示例 2.2 order注解顺序失效问题 2.2.1 order失效问题解决办法 2.3 实现Ordered接口 三、使用dependon注解控制顺序 四、AutoConfiguration注解控制bean加载顺序 4.1 AutoConfigureBefore 操作演示 4.2 A…...

python-切换镜像源和使用PyCharm进行第三方开源包安装

文章目录 前言python-切换镜像源和使用PyCharm进行第三方开源包安装1. 切换镜像源2. 使用PyCharm进行第三方开源包安装 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每…...

tp6 + swagger 配置文档接口

ThinkPHP 6.0 运行环境要求PHP7.2&#xff0c;兼容PHP8.1 安装 composer create-project topthink/think tp 6.0.*如果需要更新框架使用 composer update topthink/framework文档 完全开发手册 swagger 文档 注解文档 安装包 composer require zircote/swagger-php 引用…...

试图一文彻底讲清 “精准测试”

在软件测试中&#xff0c;我们常常碰到两个基本问题&#xff08;困难&#xff09;&#xff1a; 很难保障无漏测&#xff1a;我们做了大量测试&#xff0c;但不清楚测得怎样&#xff0c;对软件上线后会不会出问题&#xff0c;没有信心&#xff1b; 选择待执行的测试用例&#…...

Visual Studio 删除行尾空格

1.CtrlH 打开替换窗口&#xff08;注意选择合适的查找范围&#xff09; VS2010: VS2017、VS2022: 2.复制下面正则表达式到上面的选择窗口(注意前面有一个空格)&#xff1a; VS2010: $ VS2017、VS2022: $ 3.下面的替换窗口不写入 VS2010: VS2017、VS2022: 4.点选“正则表达式…...

LeetCode_BFS_中等_1926.迷宫中离入口最近的出口

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给你一个 m x n 的迷宫矩阵 maze &#xff08;下标从 0 开始&#xff09;&#xff0c;矩阵中有空格子&#xff08;用 ‘.’ 表示&#xff09;和墙&#xff08;用 ‘’ 表示&#xff09;。同时给你迷宫的入口 …...

开源Windows12网页版HTML源码

开源Windows12网页版HTML源码&#xff0c;无需安装就能用的Win12网页版来了Windows12概念版&#xff08;PoweredbyPowerPoint&#xff09;后深受启发&#xff0c;于是通过使用HTML、CSS、js等技术做了这样一个模拟板的Windows12系统&#xff0c;并已发布至github进行开源。 这…...

网页制作教程菜鸟/百度seo整站优化

一、namenode存储元数据的有三部分&#xff1a; 1、内存中&#xff0c;会存储所有元数据&#xff0c;但断电会丢失&#xff1b; 2、硬盘中,也会存储所有元数据&#xff0c;但由edits logfsimage才是所有元数据&#xff1b; (1) edits log日志文件中&#xff0c;存最新储增删…...

如何做淘宝客个人网站/semantic scholar

Open Replicator ( http://code.google.com/p/open-replicator/ ) 开源了。Open Replicator是一个用Java编写的MySQL binlog分析程序。Open Replicator 首先连接到MySQL&#xff08;就像一个普通的MySQL Slave一样&#xff09;&#xff0c;然后接收和分析binlog&#xff0c;最终…...

网站认证方式有几种/免费网络推广

Dom&#xff1a; Attribute&#xff1a;$("p").addClass(css中定义的样式类型); 给某个元素添加样式$("img").attr({src:"test.jpg",alt:"test Image"}); 给某个元素添加属性/值&#xff0c;参数是map$("img").attr("s…...

创建企业需要什么条件/免费seo推广软件

vector<vector<Point>>::const_iterator itc contours.begin();int cmin 50;while (itc!contours.end()){if (itc->size() < cmin)itc contours.erase(itc);else itc;}...

上海品牌网站建设公司/软文标题

在Oracle中判断一个用户自定义对象是否存在,可以通过如下Sql语句来实现:select * from user_objects where object_name YOUROBJECT;这样可以取得对象的所有信息. 需要注意的是:1.查询条件中的对象名要大写2.对象名有可能重复,所以需要再指定一个OBJECT_TYPE条件,才能更精确的判…...

修改动态网站/营销是什么意思

1.不含AAA或BBB的字符串 题目&#xff1a; 给定两个整数 A 和 B&#xff0c;返回任意字符串 S&#xff0c;要求满足&#xff1a; S 的长度为 A B&#xff0c;且正好包含 A 个 a 字母与 B 个 b 字母&#xff1b; 子串 aaa 没有出现在 S 中&#xff1b; 子串 bbb 没有出现在 …...