輸入流轉化爲字符串的方法:
讀取網站時,漢字讀取的方法(以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的操作,最好使用字節流