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

关于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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog