在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ java讀取流數(shù)據(jù)時(shí),字節(jié)緩存數(shù)組,第一次讀取時(shí),是否讀滿,才進(jìn)行下次讀?。??

java讀取流數(shù)據(jù)時(shí),字節(jié)緩存數(shù)組,第一次讀取時(shí),是否讀滿,才進(jìn)行下次讀取??

使用緩存字節(jié)數(shù)組讀取java字節(jié)流時(shí),第一次讀取是,讀滿緩存字節(jié)數(shù)組大小,才進(jìn)行下次讀取,還是隨機(jī)讀一個(gè)小于數(shù)組大小的值,再進(jìn)行下次讀?????

  1. 讀取本地文件時(shí),首次讀取讀滿整個(gè)字節(jié)數(shù)組,在進(jìn)行下次讀取。

package com.lyf.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.junit.Test;

public class ReadFile {

    @Test
    public void readTxt() {
        InputStream is = null;
        String path = this.getClass().getClassLoader().getResource("abc.txt")
                .getPath();
        System.out.println(path);
        String content = "";
        String loopContentString ="";
        try {
            is = new FileInputStream(path);
            byte buff[] = new byte[16];
            int len = is.read(buff);
            content = new String(buff, 0, len);
            System.out.println(len);
            while (len != -1) {
                len = is.read(buff);
                System.out.println(len);
                if(len != -1){
                    content += new String(buff,0,len);
                }
            
            }
            System.out.println(content);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                is.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        

    }
}

結(jié)果:其中abc.txt 大小就26個(gè)字節(jié)
圖片描述

  1. 讀取遠(yuǎn)程數(shù)據(jù)接口數(shù)據(jù)流時(shí),

String queryUrl = "https://www.kuaidi100.com/chaxun?com=yuantong&nu=887240223128139035";

    try {
        URL url = new URL(queryUrl);
        URLConnection con = url.openConnection();
        con.setAllowUserInteraction(false);
        urlStream= url.openStream();
        String type = con.guessContentTypeFromStream(urlStream);
        String charSet = null;
        if (type == null){
            type = con.getContentType();
        }                

        if (type == null || type.trim().length() == 0
                || type.trim().indexOf("text/html") < 0){
            return;
        }
        if (type.indexOf("charset=") > 0){
            charSet = type.substring(type.indexOf("charset=") + 8);
        }
        byte b[] = new byte[100];
        int numRead = urlStream.read(b);
        String content = new String(b, 0, numRead);
        System.out.println("b中的內(nèi)容用ascii表示,第3個(gè)字符的碼是="+b[2]+"||第一次:"+numRead+"||"+content);
        int i = 0;
        while (numRead != -1) {
            numRead = urlStream.read(b);
            if (numRead != -1) {
                i++;
                // String newContent = new String(b, 0, numRead);
                String newContent = new String(b, 0, numRead, charSet);
                System.out.println("第"+i+"次:"+numRead+"||"+newContent);
                content += newContent;
            }
        }
        System.out.println(content);
        
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally{
        try {
            urlStream.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

讀取結(jié)果:遠(yuǎn)程數(shù)據(jù)流的大小2032個(gè)字節(jié)
圖片描述

第一次讀取只讀了,27個(gè)字節(jié),

問題:為啥讀取本地文件和遠(yuǎn)程數(shù)據(jù)的首次讀取不同,是網(wǎng)絡(luò)問題,還是java中read函數(shù)的限制??
納悶............

回答
編輯回答
夢(mèng)若殤

read 方法的定義是讀取流中的字節(jié),如果流中有字節(jié),并且字節(jié)數(shù)組也是有空間的話,那么就將其讀取道整個(gè)字節(jié)數(shù)組中,出現(xiàn)這個(gè)情況的原因,我只能說是 stream 中的數(shù)據(jù)暫時(shí)就這么多. 就只有 27 個(gè)字節(jié),多的還在路上.

從這個(gè)方面去想的話,我覺得的網(wǎng)絡(luò)方面的原因,可能是這樣導(dǎo)致流尚未完全傳送完.

而后我換了一下幾個(gè)url進(jìn)行嘗試都是可以的正常讀取的.
http://114.67.130.61/
https://api.github.com/users/chenshun00

baidu
全部顯示是可以正常讀取的.

其次我打開你給的URL看了一下,發(fā)送了 65 個(gè)請(qǐng)求, 157 KB,耗時(shí)了 2.12 s.

以上屬于跟人猜測(cè).

2018年6月3日 13:35