第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在用戶生成的 java 中創(chuàng)建/寫入大文件的正確方法是什么?

在用戶生成的 java 中創(chuàng)建/寫入大文件的正確方法是什么?

UYOU 2021-12-18 15:47:58
我查看了一些說明文件寫入/創(chuàng)建操作最佳實踐的示例,但還沒有看到考慮到我的要求的示例。我必須創(chuàng)建一個類來讀取 1 個文件的內(nèi)容,進行一些數(shù)據(jù)轉(zhuǎn)換,然后將轉(zhuǎn)換后的內(nèi)容寫入不同的文件,然后將文件發(fā)送到 Web 服務(wù)。這兩個文件最終都可能非常大,例如高達(dá) 20 MB,而且這些文件的創(chuàng)建時間也是不可預(yù)測的,因為它們是由用戶生成的。因此,此過程發(fā)生的時間之間可能相差 2 分鐘,也可能在同一秒內(nèi)發(fā)生多次。從某種意義上說,該系統(tǒng)并沒有像在同一秒內(nèi)進行數(shù)百個這樣的操作一樣瘋狂,但也可能是多個。我的直覺告訴我要解決這個問題:在進程開始時創(chuàng)建一個單獨的線程。讀取第一個文件。進行數(shù)據(jù)轉(zhuǎn)換。將內(nèi)容寫入新文件。將文件發(fā)送到服務(wù)。刪除創(chuàng)建的文件。我錯過了什么嗎?是否有解決此類問題的最佳實踐?
查看完整描述

3 回答

?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗 獲得超8個贊

您應(yīng)該問的第一個問題是您首先需要將文件寫入磁盤的天氣。即使您應(yīng)該在處理階段結(jié)束時將文件發(fā)送給使用者,您也可以將文件內(nèi)容保存在內(nèi)存中并發(fā)送。消費者并不關(guān)心文件是否存儲在磁盤上,因為它只接收包含文件內(nèi)容的字節(jié)數(shù)組。

將文件存儲在磁盤上的唯一情況是如果您通過磁盤文件在進程之間進行通信(即您的生產(chǎn)者將文件寫入磁盤,向您的消費者發(fā)送一些通知,然后您的消費者讀取該文件從磁盤 - 例如基于它從通知收到的文件名)。

關(guān)于 I/O 最佳實踐,請確保使用緩沖區(qū)讀?。ú⒖赡軐懭耄┪募?。這可以大大減少內(nèi)存開銷(因為您最終只會在內(nèi)存中保留一個塊而不是整個 20 MB 文件)。

關(guān)于添加多個線程,您應(yīng)該測試天氣是否可以提高您的應(yīng)用程序性能。如果您的應(yīng)用程序已經(jīng)是 I/O 密集型的,那么添加多個線程將導(dǎo)致在您的 I/O 流上增加更多的爭用,從而導(dǎo)致性能下降。


查看完整回答
反對 回復(fù) 2021-12-18
?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗 獲得超5個贊

如果沒有詳細(xì)的情況,像這樣的問題可能會用現(xiàn)有的軟件更好地解決,比如Apache NiFi

一個易于使用、功能強大且可靠的系統(tǒng)來處理和分發(fā)數(shù)據(jù)。

它非常擅長獲取文件、轉(zhuǎn)換它們并將它們放在其他地方(以及發(fā)送電子郵件、生成分析等等)。NiFi 是一個非常強大的工具,但如果您需要額外設(shè)置的幾個文件,則可能會有點過分。


查看完整回答
反對 回復(fù) 2021-12-18
?
蝴蝶不菲

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊

鑒于您給出的描述,我認(rèn)為您應(yīng)該在一個線程上對每個文件執(zhí)行操作;即線程將下載文件,處理它,然后上傳結(jié)果。

如果您需要并行性,則將下載/處理/上傳實現(xiàn)為 aRunnable并將任務(wù)提交到ExecutorService具有有界線程池的 a 。并調(diào)整線程池的大小。(如果您將線程池大小作為配置屬性公開,這很容易。)

為什么這樣?

  1. 很簡單。需要最少的同步。

  2. 三個子任務(wù)之一可能是您的性能瓶頸。因此,通過將所有三個任務(wù)合并為一個任務(wù),您可以避免非瓶頸任務(wù)遙遙領(lǐng)先的情況。如果您在某些子任務(wù)上走得太遠(yuǎn),您就有可能耗盡(本地)磁盤空間。


我將與 Alex Rolea 關(guān)于緩沖的說法相矛盾。是的,它可能會有所幫助。但是在典型現(xiàn)代機器上的現(xiàn)代(例如 Linux)操作系統(tǒng)中,內(nèi)存 <-> 磁盤 I/O 不太可能是主要瓶頸。瓶頸更有可能是網(wǎng)絡(luò) I/O 或服務(wù)器端 I/O 性能(特別是如果服務(wù)器同時為其他客戶端提供服務(wù)。)

所以,我不會過早地調(diào)整緩沖。使系統(tǒng)正常工作,對其進行基準(zhǔn)測試,對其進行概要分析/分析,并根據(jù)這些結(jié)果找出真正的瓶頸所在以及如何最好地解決它們。

部分解決方案可能是根本不使用磁盤。(我知道您認(rèn)為您需要這樣做,但除非您的服務(wù)器及其協(xié)議真的很奇怪,否則您應(yīng)該能夠?qū)?shù)據(jù)流式傳輸?shù)娇蛻舳藘?nèi)存不足的服務(wù)器。)


查看完整回答
反對 回復(fù) 2021-12-18
  • 3 回答
  • 0 關(guān)注
  • 261 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號