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

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

IOUtils.toByteArray(inputStream) 方法是否在內(nèi)部關(guān)閉

IOUtils.toByteArray(inputStream) 方法是否在內(nèi)部關(guān)閉

白衣非少年 2022-01-19 09:53:35
這是我的文件內(nèi)容丟失的代碼流,我認為可能是 IOUtils.toByteArray() 行有問題,請在此處指導(dǎo)實際出了什么問題。文件內(nèi)容丟失:InputStream stream = someClient.downloadApi(fileId);byte[] bytes = IOUtils.toByteArray(stream); String mimeType = CommonUtils.fileTypeFromByteArray(bytes);String fileExtension=FormatToExtensionMapping.getByFormat(mimeType).getExtension();String filePath = configuration.getDownloadFolder() + "/" ;String fileName = UUID.randomUUID() + fileExtension;    File file = new File(filePath+fileName);    file.createNewFile();    FileUtils.copyInputStreamToFile(stream,file);    int length = (int)file.length();現(xiàn)在這里的長度值是0基本上沒有內(nèi)容。讓我告訴你,從 downloadApi() 收到的 inputStream 肯定有內(nèi)容。但是,如果我嘗試在代碼中進行以下修改,那么我將獲得文件的長度。文件內(nèi)容不會丟失:InputStream stream = someClient.downloadApi(fileId);byte[] bytes = IOUtils.toByteArray(stream);String mimeType = CommonUtils.fileTypeFromByteArray(bytes);String fileExtension=FormatToExtensionMapping.getByFormat(mimeType).getExtension();String filePath = configuration.getDownloadFolder() + "/" ;String fileName = UUID.randomUUID() + fileExtension;stream = new ByteArrayInputStream(bytes); //Again converted bytes to stream    File file = new File(filePath+fileName);    file.createNewFile();    FileUtils.copyInputStreamToFile(stream,file);    int length = (int)file.length();現(xiàn)在我在這里獲取文件內(nèi)容。有人能說出第一個代碼片段在技術(shù)上的問題嗎?
查看完整描述

2 回答

?
慕妹3146593

TA貢獻1820條經(jīng)驗 獲得超9個贊

不,它沒有。


您的代碼的第一個版本(在下面復(fù)制了一些添加的評論)失敗,因為您正在從已經(jīng)位于流位置末尾的流中讀取。


InputStream stream = someClient.downloadApi(fileId);


// This reads the entire stream to the end of stream.

byte[] bytes = IOUtils.toByteArray(stream);


String mimeType = CommonUtils.fileTypeFromByteArray(bytes);

String fileExtension = 

        FormatToExtensionMapping.getByFormat(mimeType).getExtension();

String filePath = configuration.getDownloadFolder() + "/" ;

String fileName = UUID.randomUUID() + fileExtension;    

File file = new File(filePath+fileName);    

file.createNewFile();    


// Now you attempt to read more data from the stream.

FileUtils.copyInputStreamToFile(stream,file);    


int length = (int)file.length();

當您嘗試從位于流末尾的流中復(fù)制時,您會得到......零字節(jié)。這意味著你得到一個空的輸出文件。


查看完整回答
反對 回復(fù) 2022-01-19
?
白豬掌柜的

TA貢獻1893條經(jīng)驗 獲得超10個贊

不,這個流應(yīng)該關(guān)閉。


這是IOUtils的目標方法:


public static long copyLarge(final InputStream input, final OutputStream output, final byte[] buffer)

        throws IOException {

    long count = 0;

    int n;

    while (EOF != (n = input.read(buffer))) {

        output.write(buffer, 0, n);

        count += n;

    }

    return count;

}


// create stream and use it

InputStream stream = someClient.downloadApi(fileId);

byte[] bytes = IOUtils.toByteArray(stream); 


// then us it again

FileUtils.copyInputStreamToFile(stream,file);


// FIXED VERSION

FileUtils.copyInputStreamToFile(new ByteArrayInputStream(bytes),file);


查看完整回答
反對 回復(fù) 2022-01-19
  • 2 回答
  • 0 關(guān)注
  • 1034 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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