使用緩存字節(jié)數(shù)組讀取java字節(jié)流時(shí),第一次讀取是,讀滿緩存字節(jié)數(shù)組大小,才進(jìn)行下次讀取,還是隨機(jī)讀一個(gè)小于數(shù)組大小的值,再進(jìn)行下次讀?????
讀取本地文件時(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é)
讀取遠(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ù)的限制??
納悶............
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è).
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問,美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。