编写大 JSON 文件避免内存不足问题的最佳方法

2024-05-01

首先,请注意今天是我第一天GSON。我正在尝试使用编写 Json 文件GSON图书馆。我有几千个JsonObjects里面一个ArrayList。当写入 Json 文件时,它应该看起来与此类似。

[
    {
        "hash_index": "00102x05h06l0aj0dw",
        "body": "Who's signing up for Obamacare?",
        "_type": "ArticleItem",
        "title": "Who's signing up for Obamacare? - Jan. 13, 2014",
        "source": "money.cnn.com",
        "primary_key": 0,
        "last_crawl_date": "2014-01-14",
        "url": "http://money.cnn.com/2014/01/13/news/economy/obamacare-enrollment/index.html"
    },
    {
        "hash_index": "00102x05h06l0aj0dw0iz0kn0l@0t#0",
        "body": "Who's signing up for Obamacare?",
        "_type": "ArticleItem",
        "title": "Who's signing up for Obamacare? - Jan. 13, 2014",
        "source": "money.cnn.com",
        "primary_key": 1,
        "last_crawl_date": "2014-01-14",
        "url": "http://money.cnn.com/2014/01/13/news/economy/obamacare-enrollment/index.html"
    }
]

现在,我使用以下代码编写 JSOn。

 private void writeNewJsonFile() throws IOException
    {
        System.out.println("Starting to write the JSON File");
        //Add everything into a JSONArray
        JsonArray jsonArrayNew = new JsonArray();

        for(int i=0;i<jsonObjectHolder.size();i++)
        {
            System.out.println("inside array");
            jsonArrayNew.add(jsonObjectHolder.get(i));
        }


        //Write it to the File
    /*  File file= new File("items_Articles_4_1.json");

        FileWriter fw = new FileWriter(file);;
        fw.write(jsonArrayNew.toString());
        fw.flush();
        fw.close();*/

        System.out.println("outside array");

        ByteArrayInputStream input = new ByteArrayInputStream(jsonArrayNew.toString().getBytes());

        Long contentLength = Long.valueOf(jsonArrayNew.toString().getBytes().length);

        ObjectMetadata metaData = new ObjectMetadata();
        metaData.setContentLength(contentLength);

        s3.putObject(outputBucket,outputFile,input,metaData);


    }

这里我正在转换JsonArray into a String并进行写作。我担心这很快就会与 Big Json 数组崩溃并给我OutOfMemoryException。就像我使用GSON逐段读取Json文件一样,有什么方法可以让我逐段写入Json文件什么的,这样可以避免OutOfMemoryException问题?


我正在使用下一个代码:

WriteJsonArrayByParts<Cache> write = new WriteJsonArrayByParts<Cache>(fileNameTest, " ");
write.writeStart();
for(Cache cache : listOfObjects()) {
    write.writeObject(cache, Cache.class);
}
write.writeEnd();
write.close();

...

public static class WriteJsonArrayByParts<T> {
    Gson gson = new Gson();
    JsonWriter writer;

    public WriteJsonArrayByParts(String fileNameWithPath, String indent) throws Exception {
        OutputStream os = new FileOutputStream(fileNameWithPath, false);
        BufferedOutputStream osb = new BufferedOutputStream(os, 8 * 1024);

        writer = new JsonWriter(new OutputStreamWriter(osb, StringUtil.UTF_8));
        writer.setIndent(indent);
    }

    public void writeStart() throws IOException {
        writer.beginArray();
    }

    @SuppressWarnings("unchecked")
    public void writeObject(T t, Class<?> resultClass) throws IOException {
        ((TypeAdapter<Object>) gson.getAdapter(resultClass)).write(writer, t);
    }

    public void writeEnd() throws IOException {
        writer.endArray();
    }

    public void close() throws IOException {
        writer.close();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写大 JSON 文件避免内存不足问题的最佳方法 的相关文章

  • 如何在线程和小程序中使用双缓冲

    我有一个关于何时调用绘制和更新方法的问题 我有游戏小程序 我想在其中使用双缓冲 但我无法使用它 问题是 在我的游戏中 有一个球在 run 方法内移动 我想知道如何使用双缓冲来交换屏幕外图像和当前图像 请有人帮忙 当同时存在 update 和
  • 使用 lambda 更新 amazon s3 对象元数据而不执行对象复制?

    是否可以使用 lambda 函数添 加或更新 s3 对象元数据而不复制对象 这篇 2 年前的帖子说我们确实需要复制一份 https stackoverflow com questions 32646646 how do i update m
  • 在java中查找OSX的版本

    我需要测试 java 中 osx 的版本是否 Try System getProperty os name and or System getProperty os version 它返回字符串 HERE https docs oracle
  • Spring Security 的 AJAX 请求给出 403 Forbidden

    我有一个基于spring boot spring security thymeleaf的网站 在某些情况下我也使用ajax 问题 我在 Spring Security 中使用表单登录安全性 在浏览器中 登录后我可以使用rest API GE
  • 使用 Jquery Ajax 将数据从 jsp 发送到 struts2 操作类

    我需要使用 jquery Ajax 将表单数据从 jsp 传递到 struts2 并从 Struts2 操作类接收回 JSON 数据 我已经给出了下面的代码 当我传递 AJAX 数据时 url search action searchTex
  • angularjs - 将对象数组(JSON 数据)发布到 PHP 页面

    我的 JSON 数据的示例如下 scope a email keval gmail permissions upload 1 edit 1 email new aa permissions upload 1 edit 1 我想发布同样的内容
  • 如何在Java中实现复合模式?

    我想实现一个复合模式Java以便绘制软件开发组织图 因此 我们假设有多个项目经理和多个开发人员 每个开发人员都被分配给一位项目经理 并且每个开发人员都能够使用各种编程语言进行编码 项目经理领导开发人员并准确了解他们的工作量 我对这个设计模式
  • 从哈希中删除 nil 值

    我希望从哈希中删除具有nil value article是一个存储每篇文章的类 并且attributes方法将文章存储为散列 预期结果 articles results author null title Former bar manage
  • 无法为对象堆保留足够的空间

    每次尝试运行该程序时 我都会重复出现以下异常 VM初始化期间发生错误 无法为对象堆保留足够的空间 无法创建Java虚拟机 我尝试增加虚拟内存 页面大小 和 RAM 大小 但无济于事 我怎样才能消除这个错误 运行 JVM XX MaxHeap
  • 如何在 jax-ws 客户端中隐藏(可能)由 jax-ws 库引起的警告

    我正在使用 netbeans 在我的应用程序中生成 Web 服务客户端 我的程序使用 jax ws 库来设置调用 Web 服务的超时 出现问题是因为每当我启动这个程序时它都会生成很多这样的警告消息 2010 年 12 月 13 日下午 4
  • Windows:如何获取所有可见窗口的列表?

    无论如何都要使用相关技术重新标记 我不知道它们是什么 稍后我可能会提出更详细的问题 关于具体细节 但现在我正在尝试掌握 大局 我正在寻找一种方法来枚举 Windows 上的 真实可见窗口 我所说的 真正可见的窗口 就是指 用户所说的 窗口
  • 是否可以将自定义清单添加到 Netbeans 6.7.1 中编译的 Java 库中?

    我尝试添加manifest file src dir manifest mf到project properties 但是查看build impl xml我发现manifest available通常伴随着main class条件 所以这让我
  • 计算事件之间的天数 - Android

    我一直在研究 Android API 并一直在寻找一种方法来计算当前日期和未来日期之间的天数 我对 android 还很陌生 而且我已经有几年没有做过 java 了 计算这个最简单的方法是什么 Thanks 最简单的方法是使用乔达时间 ht
  • startDrag 方法 已弃用且无法编译程序

    startDrag android content ClipData android view View DragShadowBuilder java lang Object int 已弃用 如何解决这个问题而又不失去对旧版本的兼容性 还有
  • 如何使用 Java 1.4 和 SAX 将任意数据编码为 XML?

    我们使用 SAX 来解析 XML 因为它不需要将整个 XML 文档读入内存来解析单个值 我读过很多文章 坚持认为 SAX 只能用于解析 解码 XML 而不能创建它 这是真的 不 这不是真的 您可以使用类似于以下内容的方式将 XML 编码为
  • Spring Boot 和安全性以及自定义 AngularJS 登录页面

    我正在为 Spring Security 实现一个自定义 AngularJS 登录页面 但遇到身份验证问题 遵循本教程 示例 以及他们的示例在本地运行良好 https github com dsyer spring security ang
  • 在 Javascript 中使用 fetch API 接收和处理 JSON

    在我的项目中 当条件不足时 我的 Django 应用程序会发送带有消息的 JSON 响应 我使用这个 JsonResponse 指令 Code data is taken email email return JsonResponse da
  • 加载腌制字典对象或加载 JSON 文件哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 什么更快 A Unpickling 加载 一个 pickled 字典对象 使用pickle load or B 使用以下命令将 JSON
  • 当我读取 500MB FileStream 时出现 OutOfMemoryException

    我使用 Filestream 读取大文件 gt 500 MB 但出现 OutOfMemoryException 任何有关它的解决方案 我的代码是 using var fs3 new FileStream filePath2 FileMode
  • Spring Data JPA 存储库,具有规范、分页和标准 fetch-join

    我正在使用具有规范和分页功能的 Spring Data JPA 存储库实现实体列表的搜索 过滤服务 我正在尝试减少查询数量 n 1 问题 并使用条件获取机制获取嵌套数据 我有两个实体类 Entity Table name delegatio

随机推荐

  • Electron 为触摸屏启用触摸事件

    我有一个连接到触摸屏的 Raspberry Pi 并通过 startx 命令在其上运行电子应用程序 startx electron app nocursor 我无法处理触摸事件 例如 touchstart touchend 的问题 显然这是
  • java中如何将字符串日期转换为时间戳?

    我想在java中将字符串日期转换为时间戳 我编写了以下编码 我声明 date1 的日期是 7 11 11 12 13 14 SimpleDateFormat datetimeFormatter1 new SimpleDateFormat y
  • Android 动态删除按钮

    我有一个按钮 当我按下它时 我想将其删除 而不是使其不可见 我读到我可以使用layout removeView mybutton 但布局是什么 我怎样才能在我的活动中得到它 Button showQuestion private void
  • findPreference(java.lang.CharSequence) 已弃用

    它给我错误 findPreference java lang CharSequence 已被弃用 目前 我的应用程序的目标是 API 10 及更高版本 任何形式的帮助来解决这个问题将不胜感激 公共类 SettingsActivity 扩展
  • 带有 Form 和 $setPristine 的 Angular 1.5 组件

    我正在尝试在 Angular 1 5 的组件中使用表单 我的表单可以正常工作 因为我有模型绑定并且可以在提交时获取数据 所以我已经完成了 90 的目标 缺少的是能够使用 setPristine 正确重置表单 我尝试了几种方法 第一种方法是将
  • C++ 虚(密封)函数

    我在我的 C 项目中使用 dll 中的类 一切都工作正常 直到 当尝试调用某个方法 在对象浏览器中列出 时 我收到一条错误消息 指出该方法不是命名空间的成员 经过调查 我注意到该方法被列为 virtual void x seal 有没有办法
  • webpack - 如何将捆绑包提取到各个组件

    我想从bundle js 一个webpack文件 中解压 提取所有组件和js文件 我只留下这个文件 我已经用谷歌搜索并尝试了几种方法来解压捆绑js文件 但它没有成功 我也尝试过该解决方案 请查找参考 如何提取Webpack中的bundle
  • 从终端输入缓冲区加载到参数堆栈

    为什么这段代码不起作用 TIB 10 ACCEPT TIB SP 1 cells 10 cmove 在该代码中 我尝试输入一个字符串并将其存储在终端输入缓冲区中 然后将其存储在参数堆栈中 但对于 S 我发现这不起作用 参数堆栈向内存不足方向
  • 这是什么文本选择控件?

    我想在具有各种文本字段的活动上的文本选择上实现相同性质的控制类型 实现图片所示行为的任何想法 参考此来自安卓2 3 http developer android com sdk android 2 3 html文档 您可以使用此方法创建自己
  • 在 Pandas 中计算滚动回归并存储斜率

    我有一些时间序列数据 我想计算 Pandas 中最后 n 天的分组滚动回归 并将该回归的斜率存储在新列中 我搜索了较旧的问题 它们要么没有得到解答 要么使用了 Pandas OLS 我听说它已被弃用 我想我可能可以使用df rolling
  • Azure Web 应用程序中 Docker 中的 Laravel 无法从已安装的文件存储中提供图像

    我有一个 azure web 应用程序 带有一个运行 apache 的自定义容器 带有 laravel 的 php 7 4 和一个安装的 azure 文件存储 从已安装的存储提供 png 文件确实适用于我在 docker 桌面中的本地构建
  • 连接字符串列中的唯一字符

    我有一个 data frame 其中有一个字符串列 city 它由用 分隔的连接字母组成 dt data frame id letters 1 6 city c A B B D A D G A C F G C D dt id city 1
  • 如何在nextjs中安装tailwind元素?

    我正在 nextjs 中为滑块安装顺风元素 但它在 nextjs 中不起作用 有任何解决方案可以轻松安装它 我遵循这个方法 1 1 https tailwind elements com quick start 当我添加此导入 tw ele
  • Svelte:如何等待组件渲染

    我正在制作一个基于套接字连接的简单应用程序 基本上 一个用户决定其他用户可以看到什么 功能之一是为其他用户启动计时器 因此 有一个带有timerState变量和startTimer函数的Timer组件 当用户连接到套接字时 计时器组件与整个
  • Angular Material如何使按钮与输入高度相同

    我有这个小表单 其中包含两个字段 轮廓外观 和一个按钮
  • 如何将 HashMap> 存储在列表中?

    我的哈希图将字符串存储为键 将数组列表存储为值 现在 我需要将其嵌入到列表中 也就是说 它将采用以下形式 List
  • 通过NVM为特定项目(文件夹)设置不同的节点版本

    我知道我可以通过以下方式更改节点版本nvm useCLI 命令 但是 我想为某个项目 文件夹 设置不同的特定节点版本 它已更改为nvm use命令但它恢复为default version每当我重新启动terminal or webstorm
  • 当条件满足时如何进入调试模式?

    有没有办法在满足一定条件时进入调试模式 例如 假设我想在以下行进入调试模式i 1变为真 using System namespace ConditionalDebug public class Program public static v
  • CodeIgniter - 为什么使用 xss_clean

    如果我正在清理我的数据库插入 并且还转义我编写的 HTMLhtmlentities text ENT COMPAT UTF 8 是否还需要使用 xss clean 过滤输入 它还有什么其他好处 xss clean http docs gip
  • 编写大 JSON 文件避免内存不足问题的最佳方法

    首先 请注意今天是我第一天GSON 我正在尝试使用编写 Json 文件GSON图书馆 我有几千个JsonObjects里面一个ArrayList 当写入 Json 文件时 它应该看起来与此类似 hash index 00102x05h06l