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

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

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

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

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

2 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

可以實現(xiàn)的,但是比較麻煩,因為你用poi只能得到一個outputstream,而如果想用流方式提供給客戶端下載,需要有一個inputstream,所以你需要一個PipedInputStream,然后把outputstream轉換為一個inputstream,然后你還需要準備一個單獨的線程去實現(xiàn)poi的操作,否則在同一個線程里,你沒辦法同時對outputstream和inputstream進行操作,所以還是比較麻煩,但可以做到。代碼的例子沒有找到合適的,你可以看看PipedInputStream/PipedOutputStream的相關文檔。
                            
查看完整回答
反對 回復 2019-05-11
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

你可以先返回一個頁面就像平時下載文件的數(shù)據(jù)處理中下載將在一分鐘后開始....之類的把處理完的文件保存起來,時間到把鏈接顯示出來,或者自動請求,然后請求來的時候把文件發(fā)過去
處理時間不長的話,也可以試著把超時時間設長一點
                            
查看完整回答
反對 回復 2019-05-11
  • 2 回答
  • 0 關注
  • 671 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號