0 0

关于System.out.write(byte[] b, int off, int len)方法5

//代码如下,try块没有写。
InputStream is = is = new FileInputStream("test.txt");
int len;
byte[] b = new byte[20];
while((len = is.read(b)) != -1){
	System.out.write(b, 0, len);
}

 下面这段文字为test.txt文件的内容,

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于
1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有
卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级
计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业
环境下,Java更具备了显著优势和广阔前景。

 

运行后,多数情况能输出正常,但是偶尔会有部分乱码。如下。 请问为什么?

 

 

Java是一种可以���写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于
1995年5月推出的Java程序设计语言���Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有
卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级
计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业
环境下,Java更具备了显著优势和广阔前景。

 

 

2014年11月21日 22:48

1个答案 按时间排序 按投票排序

0 0

采纳的答案

因为你是按byte读取的,所以可能会出现字符集问题。原因是byte[20] 而你的文本包含了中文字符和数字字母,因此一个汉字可能会只读取到了其中部分
你可以在while循环外创建个ByteArrayOutputStream 在while循环内拼接,最后输出。

public static void main(String[] args) throws Exception {
		InputStream is = new FileInputStream("/Users/yz/test.txt");
		int len;
		byte[] b = new byte[20];
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		while((len = is.read(b)) != -1){
			baos.write(b, 0, len);
		}
		System.out.write(baos.toByteArray());
	}

你也可以用char指定编码的方式去读取,记得设置编码。
public static void main(String[] args) throws Exception {
		InputStream is = new FileInputStream("/Users/yz/test.txt");
		BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
		String str = "";
		while((str=br.readLine())!=null){
			System.out.println(str);
		}
	}

2014年11月23日 17:17

相关推荐

Global site tag (gtag.js) - Google Analytics