输入流转化为字符串的方法:


读取网站时,汉字读取的方法(以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的操作,最好使用字节流