iteye_5575
2014-11-21 22:48
浏览 446
已采纳

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

//代码如下,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更具备了显著优势和广阔前景。

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • joelle(喬如) 2014-11-23 17:17
    已采纳

    因为你是按byte读取的,所以可能会出现字符集问题。原因是byte[20] 而你的文本包含了中文字符和数字字母,因此一个汉字可能会只读取到了其中部分
    你可以在while循环外创建个ByteArrayOutputStream 在while循环内拼接,最后输出。
    [code="java"]
    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());
    }
    [/code]
    你也可以用char指定编码的方式去读取,记得设置编码。
    [code="java"]
    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);
    }
    }
    [/code]

    点赞 打赏 评论

相关推荐 更多相似问题