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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java outputstream 有可以實(shí)現(xiàn) append 的方式嗎?

Java outputstream 有可以實(shí)現(xiàn) append 的方式嗎?

猛跑小豬 2019-01-16 23:23:46
大家好,我遇到了一個(gè)問題。 更新下:其實(shí) outputstream.write 就是附加操作,而不是重寫。舉例來(lái)說,第一次 write 并且 flush 以后,后面再 flush 也能推送到客戶端,而且是追加。我的問題是,后面追加的操作沒能寫入到第一次生成的 excel 中。在資源管理器中看文件大小是 28kb,打開后再關(guān)閉就變成了 8kb。 原問題: 客戶端想要下載 excel 文件,我從數(shù)據(jù)庫(kù)里找到,然后用 apache poi 生成 byte array,設(shè)置好響應(yīng)頭,再傳回客戶端,客戶端就可以下載。 問題就是,有時(shí)候生成這個(gè) excel 的耗時(shí)比較長(zhǎng),瀏覽器沒收到響應(yīng),就 504 超時(shí)了。我想著能不能生成一部分,發(fā)送一部分,這樣連接就建立起來(lái)了。一直到所有的內(nèi)容都生成了,再關(guān)閉連接。 我用的是 servlet.getOutputStream(),沒找到類似 append 的方法,PrinterWriter 類有類似的方法,但是我試了一下,這樣傳回客戶端的沒法打開,應(yīng)該是只能傳二進(jìn)制回去吧?我還試了一下socket,但是也需要用socket.getOutputStream(); 的方法獲取輸出流,這樣又繞回來(lái)了。 所以來(lái)這里請(qǐng)教下各位,有沒有其它方式能實(shí)現(xiàn)我這需求,還是這個(gè)需求就是不可實(shí)現(xiàn)的?如果有更好的方法,還請(qǐng)賜教。謝謝!
查看完整描述

2 回答

?
蝴蝶不菲

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

可以實(shí)現(xiàn)的,但是比較麻煩,因?yàn)槟阌胮oi只能得到一個(gè)outputstream,而如果想用流方式提供給客戶端下載,需要有一個(gè)inputstream,所以你需要一個(gè)PipedInputStream,然后把outputstream轉(zhuǎn)換為一個(gè)inputstream,然后你還需要準(zhǔn)備一個(gè)單獨(dú)的線程去實(shí)現(xiàn)poi的操作,否則在同一個(gè)線程里,你沒辦法同時(shí)對(duì)outputstream和inputstream進(jìn)行操作,所以還是比較麻煩,但可以做到。代碼的例子沒有找到合適的,你可以看看PipedInputStream/PipedOutputStream的相關(guān)文檔。

查看完整回答
反對(duì) 回復(fù) 2019-02-12
?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

你可以先返回一個(gè)頁(yè)面 就像平時(shí)下載文件的 數(shù)據(jù)處理中 下載將在一分鐘后開始.... 之類的 把處理完的文件保存起來(lái), 時(shí)間到把鏈接顯示出來(lái), 或者自動(dòng)請(qǐng)求 , 然后請(qǐng)求來(lái)的時(shí)候把文件發(fā)過去

處理時(shí)間不長(zhǎng)的話, 也可以試著把超時(shí)時(shí)間設(shè)長(zhǎng)一點(diǎn)

查看完整回答
反對(duì) 回復(fù) 2019-02-12
  • 2 回答
  • 0 關(guān)注
  • 736 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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