Java 中序列化和反序列化数组以实现数据持久化

java 中序列化和反序列化数组以实现数据持久化

本文介绍了如何在 Java 中使用序列化和反序列化技术将字符串数组保存到文件中,以便在程序的不同运行会话之间持久化数据。重点讲解了如何将数组写入文件,以及如何从文件中读取数组,并提供示例代码和注意事项,帮助开发者理解和应用这些技术。

序列化数组到文件

Java 的序列化机制允许将对象转换为字节流,从而可以将其保存到文件或通过网络传输。要序列化一个数组,需要使用 ObjectOutputStream 将数组对象写入 FileOutputStream。

以下代码演示了如何将二维字符串数组序列化到名为 “t.tmp” 的文件中:

import java.io.*;public class SerializeArray {    public static void main(String[] args) {        String[][] myArray = {{"name1", "123"}, {"name2", "456"}};        try (FileOutputStream fos = new FileOutputStream("t.tmp");             ObjectOutputStream oos = new ObjectOutputStream(fos)) {            oos.writeObject(myArray);            System.out.println("数组已成功序列化到 t.tmp");        } catch (IOException i) {            i.printStackTrace();        }    }}

注意事项:

立即学习“Java免费学习笔记(深入)”;

确保你的数组对象及其包含的类都实现了 Serializable 接口。虽然 String 类已经实现了 Serializable 接口,但自定义的类如果需要序列化,也必须实现该接口。使用 try-with-resources 语句可以确保流在使用完毕后自动关闭,避免资源泄露。

从文件反序列化数组

要从文件中读取序列化的数组,需要使用 ObjectInputStream 从 FileInputStream 中读取对象。

以下代码演示了如何从 “t.tmp” 文件反序列化数组:

import java.io.*;public class DeserializeArray {    public static void main(String[] args) {        String[][] loadedArray = null;        try (FileInputStream fis = new FileInputStream("t.tmp");             ObjectInputStream ois = new ObjectInputStream(fis)) {            loadedArray = (String[][]) ois.readObject();            System.out.println("数组已成功从 t.tmp 反序列化");            // 打印反序列化的数组内容            for (int i = 0; i < loadedArray.length; i++) {                System.out.println("Name: " + loadedArray[i][0] + ", Count: " + loadedArray[i][1]);            }        } catch (IOException i) {            i.printStackTrace();        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        if (loadedArray == null) {            System.out.println("加载文件损坏,需要从头开始创建新数据");            // 在这里处理文件损坏的情况,例如创建新的数据结构        }    }}

注意事项:

立即学习“Java免费学习笔记(深入)”;

readObject() 方法返回的是 Object 类型,需要强制类型转换为实际的数组类型。需要处理 ClassNotFoundException 异常,该异常在找不到对应的类定义时抛出。在反序列化后,应该检查数组是否成功加载。如果 loadedArray 为 null,则表示文件可能已损坏,需要采取相应的措施,例如从头开始创建新数据。

追加数据到文件

直接使用 ObjectOutputStream 无法实现追加数据到文件。每次创建 ObjectOutputStream 都会覆盖原有文件内容。如果需要追加数据,可以考虑以下两种方案:

读取-追加-写入: 首先读取整个文件内容到内存,然后将新的数据追加到内存中的数据结构,最后将整个数据结构重新写入文件。这种方法适用于数据量较小的情况。使用其他序列化方式: 考虑使用其他序列化方式,例如 JSON 或 XML,这些格式更易于追加和解析。可以使用 JSON 库(如 Jackson 或 Gson)将数组序列化为 JSON 字符串,然后将 JSON 字符串追加到文件中。读取时,先读取整个 JSON 字符串,然后使用 JSON 库将其反序列化为数组。

示例(使用 JSON 追加):

import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import java.io.*;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.List;public class AppendArrayToFile {    public static void main(String[] args) {        String fileName = "data.json";        Gson gson = new Gson();        // 添加新的数据        String[][] newData = {{"name3", "789"}};        appendData(fileName, newData, gson);        // 读取所有数据        List allData = readAllData(fileName, gson);        System.out.println("所有数据:");        for (String[][] data : allData) {            for (int i = 0; i < data.length; i++) {                System.out.println("Name: " + data[i][0] + ", Count: " + data[i][1]);            }        }    }    // 追加数据到文件    public static void appendData(String fileName, String[][] newData, Gson gson) {        List existingData = readAllData(fileName, gson);        if (existingData == null) {            existingData = new ArrayList();        }        existingData.add(newData);        try (FileWriter writer = new FileWriter(fileName)) {            gson.toJson(existingData, writer);            System.out.println("数据已追加到 " + fileName);        } catch (IOException e) {            e.printStackTrace();        }    }    // 读取所有数据    public static List readAllData(String fileName, Gson gson) {        try (FileReader reader = new FileReader(fileName)) {            Type listType = new TypeToken<List>() {}.getType();            return gson.fromJson(reader, listType);        } catch (FileNotFoundException e) {            // 文件不存在,返回 null            return null;        } catch (IOException e) {            e.printStackTrace();            return null;        }    }}

总结:

使用 Java 的序列化机制可以方便地将数组保存到文件中,并在程序的不同运行会话之间恢复数据。但是,直接使用 ObjectOutputStream 无法实现追加数据到文件。如果需要追加数据,可以考虑读取-追加-写入的方法,或者使用其他更适合追加的序列化方式,例如 JSON。选择哪种方法取决于数据的规模和应用场景。使用 JSON 示例代码需要引入 Gson 库。

以上就是Java 中序列化和反序列化数组以实现数据持久化的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/127841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月27日 19:58:44
下一篇 2025年11月27日 20:12:14

相关推荐

  • 2025年值得关注的七大BNB生态代币汇总

    随着2025年币圈生态逐渐成熟,BNB Chain及其生态代币表现受到投资者高度关注。本文汇总了七大值得关注的BNB生态代币,并分析其投资亮点与潜力。 一、BNB(币安币) 作为BNB Chain原生代币,BNB不仅用于链上交易手续费支付,还在DeFi、NFT及平台治理中发挥核心作用。长期来看,生态…

    2025年12月9日
    000
  • 山寨币(Altcoin):比特币之外的加密机遇

    在波澜壮阔的加密货币世界里,比特币无疑是那颗最耀眼的明星,它的诞生拉开了数字经济的序幕,也塑造了我们对货币未来的想象。然而,在这片广袤的数字疆域中,并非只有比特币一枝独秀。在比特币的光芒之外,涌现出了数以万计的数字资产,它们被统称为“山寨币”(altcoin)。这个词语的出现,并非带有贬义,而是指代…

    好文分享 2025年12月9日
    000
  • 迷因币(Meme Coin):社区文化与投资风险

    迷因币,一个在加密货币世界中快速崛起并引发广泛讨论的现象,其本质远不止于一枚简单的数字代币。它是一场由互联网文化、社群共识与投机心理交织而成的独特实验。当您初次接触“迷因币”这个词汇时,脑海中可能浮现出各种充满幽默感和病毒式传播特性的图片或视频,而正是这种“迷因”的力量,被巧妙地嫁接到区块链技术之上…

    好文分享 2025年12月9日
    000
  • 七大中文Meme币盘点:谁有机会登陆币安主站?

    近期中文Meme币市场持续升温,多只Meme币凭借社区热度和创新玩法受到关注。本文将盘点七大中文Meme币,分析它们的特点及是否具备登陆币安主站的潜力。 七大中文Meme币概览 在中文加密社区中,以下七种Meme币表现突出: 1. 币安汽车(BAICoin):结合汽车概念与社区互动,短期涨幅显著。 …

    2025年12月9日
    000
  • BNB价格飙升至1300美元后市值超XRP跻身加密货币第四

    近期,加密市场迎来BNB价格飙升,突破1300美元大关,总市值一举超过瑞波币(XRP),跻身加密货币排名第四。投资者关注BNB背后的市场需求与生态发展,短期波动仍较明显。 BNB价格上涨原因分析 BNB近期上涨主要受到以下因素推动: 1. 生态系统扩展:BNB Chain多条DeFi与NFT项目活跃…

    2025年12月9日
    000
  • 稳定币新手教学:什么是稳定币?原理、类型与风险全面解析

    在加密货币世界中,稳定币因价格相对稳定、便于交易结算而备受关注。对于新手来说,了解稳定币的原理、类型及风险是进入数字资产市场的第一步。 稳定币是什么? 稳定币是一类价格与法定货币或其他资产挂钩的加密货币,通常与美元、欧元或黄金等资产保持1:1的锚定比例。它的核心目的在于降低加密市场波动风险,便于支付…

    2025年12月9日
    000
  • 告别选择困难:10大最佳免费币圈行情App横向评测

    在信息爆炸的加密货币市场,一款高效、准确的行情app是投资者做出明智决策的关键。本文将为你横向评测当前市场上10款顶级的免费币圈行情应用,它们不仅提供实时价格,更集成了深度数据、专业图表和资产管理等强大功能,帮助你告别选择困难,找到最适合自己的投资利器。 十大免费币圈行情App榜单 1. 币安 (B…

    2025年12月9日
    000
  • 币圈看盘神器Top 10:全部免费,官方正版直达

    寻找一款功能强大且免费的看盘工具是每位投资者的必修课。本文为您整理了十大币圈必备的看盘神器,它们不仅提供实时行情、专业的图表分析工具,而且全部为官方正版,帮助您精准把握市场脉搏,做出更明智的交易决策。 十大免费看盘工具排行榜 1. 币安 (Binance) 作为全球交易量最大的加密货币交易所,币安自…

    2025年12月9日
    000
  • 官方正版集合:币圈十大免费行情查询App/网站下载

    在快节奏的加密货币市场,实时、准确的行情数据是做出明智决策的基础。本文为您精选了十款功能强大且广受好评的免费行情查询app和网站,它们不仅提供基础的价格信息,还集成了深度图表、市场分析和资产管理等多种功能,帮助您轻松掌握市场脉搏。 主流交易所行情工具 这类App通常集行情、交易、资讯于一体,数据更新…

    2025年12月9日
    000
  • 币圈看盘利器盘点:十大免费行情工具网站与App

    在瞬息万变的加密货币市场,拥有一款高效的看盘工具至关重要,它能帮助投资者实时捕捉价格波动、分析市场趋势。本文为您盘点十大免费且功能强大的行情工具网站与app,无论您是新手还是资深交易者,都能从中找到适合自己的看盘利器。 币圈看盘工具TOP 10 1. 币安 (Binance) 作为全球领先的加密货币…

    2025年12月9日
    000
  • XRP与SUI表现亮眼,Monad空投细节公布

    今日加密市场中,XRP(瑞波币)与SUI成为市场焦点,价格双双上涨,表现明显优于大盘。同时,备受期待的Monad空投活动也正式公布细节,引发社区热议与市场关注。 XRP与SUI行情表现强势 在主流币整体震荡的背景下,XRP24小时上涨超过6%,突破0.64美元,主要受益于监管利好消息与机构资金持续流…

    2025年12月9日
    100
  • 比特币Hyper项目诈骗疑云加剧,投资者转向DeepSnitch AI寻求300倍回报

    近期币圈热点再起,名为“Hyper比特币项目”的投资计划被曝出涉嫌资金盘运作,引发了广泛质疑与恐慌性抛售。随着疑云不断加深,部分投资者开始撤出资金,转向新兴AI赛道项目——DeepSnitch AI,希望在新一轮Web3与AI融合浪潮中寻求高达300倍回报的机会。 Hyper项目疑似“高息陷阱”曝光…

    2025年12月9日
    100
  • 币圈行情数据哪里查?这10个免费网站/App够用了!

    在瞬息万变的加密货币市场,及时获取准确的行情数据是做出明智决策的关键。本文为你精选了10个功能强大且免费的行情数据网站和app,它们能帮助你轻松追踪价格、分析市场趋势并把握投资机会,无论是新手还是资深玩家都值得收藏。 币圈行情必备工具TOP 10 1. 币安 (Binance) 作为全球交易量最大的…

    2025年12月9日
    100
  • 加密货币有哪些?十大主流加密货币2026推荐

    币安binance 欧易okx 火币HTX 大门Gate.io 本文旨在梳理当前数字资产市场中备受关注的主流项目,通过介绍它们的特点和应用前景,为关注该领域的朋友提供一个清晰的参考框架。了解这些头部项目,是探索数字经济新形态的重要一步。 一、比特币 (BTC) 1、作为首个成功的去中心化数字资产,比…

    2025年12月9日 好文分享
    100
  • 以太坊侧链:扩容解决方案的探索

    以太坊,这个承载着去中心化金融(defi)、非同质化代币(nft)和众多创新应用基石的区块链网络,正面临着前所未有的挑战——可扩展性瓶颈。随着用户数量和交易量的几何级增长,以太坊主网的拥堵日益严重,导致交易费用飙升(gas费)、交易确认时间延长,严重影响了用户体验和应用的进一步普及。在这种背景下,以…

    好文分享 2025年12月9日
    000
  • 数字货币种类繁多:如何区分与选择?

    在瞬息万变的金融世界中,数字货币已不再是遥远的科幻概念,而是深刻影响着全球经济格局的现实力量。从比特币的横空出世,到以太坊的生态繁荣,再到各种新兴代币的层出不穷,数字货币的种类之多,令人眼花缭乱。对于初入币圈的新手而言,面对这片广阔的数字丛林,如何辨别这些看似相似却又差异显著的数字资产,并从中选择出…

    好文分享 2025年12月9日
    000
  • 加密货币的定义与核心特性

    加密货币交易平台推荐: 欧易OKX: Binance币安: 火币Huobi: Gateio芝麻开门: 在数字时代浪潮中,一个颠覆性的概念——加密货币,正以前所未有的速度改变着金融格局。它不仅仅是一种简单的支付方式,更是一种基于密码学原理构建的全新资产类别,其背后蕴含着深刻的技术创新与经济哲学。理解加…

    好文分享 2025年12月9日
    000
  • 什么是稳定币?全球十大稳定币2026介绍

    币安binance 欧易okx 火币HTX 大门Gate.io 稳定币作为连接传统金融与数字资产世界的桥梁,其核心价值在于提供价格稳定的数字计价单位和交易媒介。本文将详细解释什么是稳定币,并对2026年可能占据市场主导地位的十大稳定币进行前瞻性介绍,帮助您更好地理解这一关键领域。 一、什么是稳定币?…

    2025年12月9日
    000
  • 2025年虚拟货币怎么买 比特币/以太坊购买渠道推荐及购买指南

    进入2025年,虚拟货币市场已不再是小众话题,比特币(BTC)和以太坊(ETH)作为市场的两大基石,吸引了越来越多普通投资者的目光。本篇指南将为你详细解析在2025年的市场环境下,如何通过安全可靠的渠道购买比特币和以太坊,并提供一份完整的操作流程。 一、2025年购买虚拟货币的主流方式 随着市场的发…

    2025年12月9日
    000
  • 以太坊NFT:数字艺术与收藏的爆发

    想象一个没有银行、没有中介、每个人都能完全掌控自己资产的金融世界。这并非遥不可及的梦想,而是正在由以太坊(ethereum)驱动的去中心化金融(defi)所构建的现实。defi是一个建立在区块链技术之上的金融生态系统,它通过智能合约自动执行金融协议,消除了传统金融中对信任和中介的需求。以太坊作为其最…

    好文分享 2025年12月9日
    000

发表回复

登录后才能评论
关注微信