首页 > 其他 > 详细

JAVA 一点字节流与字符流的笔记

时间:2014-03-03 18:25:51      阅读:339      评论:0      收藏:0      [点我收藏+]

  最近用Java写了一个网页数据采集的程序, 偶尔发现出现少量中文乱码的现象. 后来才知道对于中文要用字符流来进行操作.

以下是采用字节流的代码:

/**
* Get the target URL‘s source<br/>
* Use byte stream
*
* @param url
* target URL
* @return String: source
* @throws Exception
*/
publicstaticString getUrlStr1(String url) throwsException {
InputStream is = null;
String strData = "";
try{
URL u = newURL(url); // Create URL
is = u.openStream(); // Open the URL stream
// Load the byte to the strData
byte[] myByte = newbyte[1024* 4];
intlen = 0;
while((len = is.read(myByte)) > 0) {
String st = newString(myByte, 0, len);
strData += st;
}
} catch(Exception e) {
throwe;
} finally{
is.close();
}
returnstrData;
}

下面是改进后的字符流代码:

/**
* Get the target URL‘s source<br/>
* Use character stream
*
* @param url
* target URL
* @return String: source
* @throws Exception
*/
publicstaticString getUrlStr(String url) throwsException {
InputStream is = null;
OutputStream os = newByteArrayOutputStream();
try{
URL u = newURL(url); // Create URL
is = u.openStream(); // Open the URL stream
// Load the byte to the strData
byte[] myByte = newbyte[1024* 4];
intlen = 0;
while((len = is.read(myByte)) > 0) {
os.write(myByte, 0, len);
}
} catch(Exception e) {
throwe;
} finally{
is.close();
os.close();
}
returnos.toString();
}

通过对比发现,由于在字节流时提前转换为字符串, 如果字节数组最后只存了中文字符的前半部分, 这相当于把一个中文字符撕裂成两半, 转成String类型后就出现乱码, 而且无法逆转...

 

本文出自 “异性恋恐惧症” 博客,请务必保留此出处http://twoxzi.blog.51cto.com/8613587/1366018

JAVA 一点字节流与字符流的笔记,布布扣,bubuko.com

JAVA 一点字节流与字符流的笔记

原文:http://twoxzi.blog.51cto.com/8613587/1366018

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!