讀取網站字節流與字符流

輸入流轉化爲字符串的方法:


讀取網站時,漢字讀取的方法(以POST方式)



String sendurl = "http://www.baidu.com";

URL url = new URL(sendurl); // 實際url

URLConnection connection = url.openConnection();

connection.setDoOutput(true);


//這裏可以有connection的有關設置


OutputStreamWriter out = null;

out = new OutputStreamWriter(connection.getOutputStream(),"GB2312");//參數設置GB2312

String writerStr = "post內容,以&連接參數";

out.write(writerStr);

out.flush();

out.close();


第一種方式:讀取非漢字 DataInputStream是怎麼樣也不行的

DataInputStream in = new DataInputStream(connection.getInputStream());

String inline = "";

StringBuffer getResult = new StringBuffer();

while ((inline = in.readLine()) != null) {

getResult.append(inline);

}


BufferedReader tBufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

StringBuffer getResult = new StringBuffer();

String sTempOneLine = new String("");

while ((sTempOneLine = tBufferedReader.readLine()) != null){

getResult.append(sTempOneLine);

}


第二種方式:讀取漢字內容

InputStreamReader tBufferedReader = new InputStreamReader(connection.getInputStream(), "GB2312");

int ch;

StringBuffer getResult = new StringBuffer();

while((ch = tBufferedReader.read()) > -1){

getResult.append((char) ch);

}

tBufferedReader.close();



輸出String result = getResult.toString();

System.out.println(result);


當InputStreamReader創建時,只有設置字符編碼格式爲"GB2312"時纔可以,通過測試,有的網站,例如百度首頁,寫上"GB2312"時卻不行,具體問題具體分析


有關流的問題就是字節流與字符流之間不清:

字節流以8位傳輸,字符流以16位傳輸


字節流 --> 字符流 (byte[]轉化爲String時)

String bytetoStr new String(byte[] bytes, String charSetName);


字符流 --> 字節流 (String轉化爲byte[])

byte[] strtoByte = String.getBytes(String charsetName);


字節流沒有使用緩存區,而字符流使用了緩存區,這樣字節流節省了內存空間。特別注意,使用字符流操作文件時,當寫入文件時,一定要關閉或者清空緩存,因爲字符串還在緩存區中。所以可以看見,什麼時候使用out.flush(),當使用的流涉及到緩存區時


一般當不涉及到encode的操作,最好使用字節流


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章