在我的項目中,我們正在保存一些文件。 當請求文件時,我從HBase表中獲取文件,然後將其發送到瀏覽器。發送文件更好或輸出流
數據保存在HBase的Bytes中。所以當我獲取文件時,我會以字節形式獲取它。
現在我必須將這些字節轉換爲File對象或輸出流。
我想知道的是通過File對象發送文件更好還是Output Stream?
該文件可以從1 MB到10個MS不等。
我正在使用REST API發送數據。
在我的項目中,我們正在保存一些文件。 當請求文件時,我從HBase表中獲取文件,然後將其發送到瀏覽器。發送文件更好或輸出流
數據保存在HBase的Bytes中。所以當我獲取文件時,我會以字節形式獲取它。
現在我必須將這些字節轉換爲File對象或輸出流。
我想知道的是通過File對象發送文件更好還是Output Stream?
該文件可以從1 MB到10個MS不等。
我正在使用REST API發送數據。
發送一個java.io.File對象不會有幫助,因爲它將是一個非常特殊的二進制對象並且它會要求接收系統在java中。
您提到,您是使用REST。現在,這需要獨立於任何技術/平臺的東西是。
一種可行的方法如下。
這是使用servlet的example of PDF file download。
發送文件只是一個*完全浪費時間。*它只是一個文件名,它只在它創建的服務器上有意義。 – EJP
這並不完全清楚你在做什麼,但事實是,java.io.File
只是一個路徑的抽象,因此它不包含任何數據。因此,我不認爲發送一個java.io.File
對象會以任何方式幫助你,如果你想要做的是發送實際的文件內容。
發送一個OutputStream
是不合理的,它只是一個類來控制字節流到給定接收器中。你發送的是字節,而不是流(即如果你的接收器是一個套接字,那麼使用與這個給定接收器相關聯的OutputStream
通過套接字發送文件內容的字節是有意義的)。
在我看來,這是不正確的。我通過REST將圖像作爲文件對象發送,我可以在瀏覽器上查看它們。 – JHS
這是語義。 –
@Juniad *我通過REST發送圖像作爲文件對象,我可以在瀏覽器上查看它們。*您將它們看作是什麼? 1.圖像顯示爲圖像。 2.一個圖片src指向一個URL。 3.別的東西。從不同的網絡調用您的REST API並測試它是否正常工作。 –
我假設問題是詢問是直接寫入OuputStream還是首先將byte []保存到本地文件。我能想到的首先保存到本地文件的唯一原因是將檢索與HBase和用戶的下載分開。如果您希望每個從HBase返回一個byte []的請求將整個文件返回給響應中的用戶,請使用OutputStream。
話雖如此,檢索10 MB作爲一個字節[]似乎可能會消耗大量的內存每個請求。你可能想看看你能否讓HBase給你一個InputStream,所以你不需要每個請求高達10MB的內存。
真的很重要嗎?爲了發送文件,你不需要一個文件,這意味着一堆IO來創建一些東西發送,然後就會消失? –