Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在POJO中保留大字符串?_Java_String_Pojo - Fatal编程技术网

Java 如何在POJO中保留大字符串?

Java 如何在POJO中保留大字符串?,java,string,pojo,Java,String,Pojo,如果我有一个大字符串的对象属性(比如50KB到1MB的文件内容,可能更大),那么在POJO中声明这样一个属性的做法是什么?我所需要做的就是能够从我的应用程序的一个层设置一个值,并将它传输到另一个层,而不使对象本身“沉重” 我在考虑关联InputStream或OutputStream来获取/设置值是否有意义,而不是引用字符串本身-这意味着当我尝试读取内容的值时,我将其读取为字节流,而不是加载到内存中的整个巨大字符串。。。想法?您可以拥有一个对象,该对象在每次访问时提供一个流或迭代器。请注意,内容必

如果我有一个大字符串的对象属性(比如50KB到1MB的文件内容,可能更大),那么在POJO中声明这样一个属性的做法是什么?我所需要做的就是能够从我的应用程序的一个层设置一个值,并将它传输到另一个层,而不使对象本身“沉重”


我在考虑关联InputStream或OutputStream来获取/设置值是否有意义,而不是引用字符串本身-这意味着当我尝试读取内容的值时,我将其读取为字节流,而不是加载到内存中的整个巨大字符串。。。想法?

您可以拥有一个对象,该对象在每次访问时提供一个流或迭代器。请注意,内容必须存在于某些存储上,如文件。也就是说,您的对象将存储指向存储器的指针(例如文件路径),每次有人访问它时,您都会打开一个流或创建一个迭代器,让该方读取。还要注意,为了节省内存,无论谁使用它,都必须确保不要将整个内容存储在内存中

然而,50KB或1MB的内存非常小。除非你有千兆字节(或者可能是百兆字节),否则我不会尝试这样做

此外,即使您有大量数据,也通常只使用文件或您将使用的任何存储更简单


tl;dr:只需使用字符串即可

您所描述的内容在很大程度上取决于您对数据的预期使用。如果您是以原始形式交付内容,那么可能有更有效的方法来管理它

例如,如果你的应用程序有一个web界面,那么你的应用程序可能只提供一个URL供web服务器将内容流式传输给请求者。如果它是基于CLI的应用程序,您可能只需要一个简单的文件拷贝就可以了。但是,如果您的应用程序正在处理该文件,那么您的POJO可能只保留该处理的结果,而不是原始数据本身


如果您希望提供一种使用POJO引用外部流的通用模式,我建议您在POJO中存储类似于URI的内容,告诉您在哪里可以找到流(如数据库中的行ID、文件名或URI),而不是存储流本身的实例。这样做,您将减少打开的文件句柄的数量,防止潜在的并发问题,并且能够在需要时在本地序列化这些对象,而不必复制保存在别处的原始数据。

字符串可能有多大?2万?20g?你说的“坚持POJO”是什么意思?POJO是一个普通的旧Java对象。它存在于记忆中,因此不会持久。你到底想做什么?Aaron,JB Nizet:谢谢你帮我改进我的问题-请检查我的更新。你的意思是说,你想要一个指向数据库中字符串数据的指针,而不是POJO中的整个字符串吗?@Neel,你应该使用“persist”这个词描述即使您的服务关闭并重新启动也可以检索的数据存储。@Neel:基本上我想告诉您,您应该只使用字符串,所以。是的,我得到了那部分-我试图请求第一部分的代码片段-“对象将存储指针”…谢谢phatfingers!在我的特定情况下,我将尝试将一个文件的内容复制到另一个文件中。您认为将InputStream保留为属性是一个好主意,其中InputStream可以从URL或文件构建?使用实用程序类从存储在POJO中的URL或文件名提供InputStream。如果最终使用同一对象处理多个线程,那么POJO将可以安全使用,每个InputStreams将彼此隔离,打开、读取和关闭(抱歉,在完成之前意外输入)——如果在单个方法调用中实例化、打开和关闭流,更容易保证你不会意外地留下一些未完成的东西。