输入流转化为字符串的方法:
读取网站时,汉字读取的方法(以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的操作,最好使用字节流