簡體   English   中英

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

[英]How to persist large strings in a POJO?

如果我有一個大字符串對象的屬性(比如文件的內容大約50KB到1MB,可能更大),那么在POJO中聲明這樣一個屬性的做法是什么? 我需要做的就是能夠從我的應用程序的一個層設置一個值並將其轉移到另一個層而不會使對象本身“沉重”。

我正在考慮將InputStream或OutputStream關聯以獲取/設置值是否有意義,而不是引用String本身 - 這意味着當我嘗試讀取內容的值時,我將其讀作字節流,而不是比整個巨大的字符串加載到記憶中......想法?

每次訪問時,都可以有一個提供流或迭代器的對象。 請注意,內容必須存在於某些存儲上,例如文件。 即,您的對象將存儲指針(例如文件路徑)到存儲,並且每次有人訪問它時,您打開流或創建迭代器並讓該方讀取。 另請注意,為了節省內存,任何使用它的人都必須確保不將整個內容存儲在內存中。

但是,50KB或1MB非常小。 除非你有像千兆字節(或者可能是百兆字節),否則我不會嘗試做類似的事情。

此外,即使您擁有大量數據,只需使用文件或您將使用的任何存儲空間通常也會更簡單。

tl; dr :只需使用String。

您所描述的內容在很大程度上取決於您對數據的預期使用。 如果您以原始形式提供內容,則可能有更有效的方法來管理它。

例如,如果您的應用程序具有Web界面,則您的應用程序可能只提供Web服務器的URL以將內容流式傳輸給請求者。 如果它是基於CLI的應用程序,您可以使用簡單的文件副本。 但是,如果您的應用正在處理該文件,那么您的POJO可能只保留該處理的結果而不是原始數據本身。

如果您希望提供使用POJO和外部流引用的一般模式,我建議在POJ​​O中存儲類似於URI的內容,該URI告知在哪里可以找到流(如數據庫中的行ID或文件名)或者URI)而不是存儲流本身的實例。 這樣做,您將減少打開文件句柄的數量,防止潛在的並發問題,並且可以在需要時在本地序列化這些對象,而無需復制其他地方持久存儲的原始數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM