首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileInputStream返回空

FileInputStream返回空
EN

Stack Overflow用户
提问于 2014-12-17 05:20:15
回答 1查看 2.1K关注 0票数 0

我有两种方法,都使用FileInputStream对象。第一个返回期望值。这种方法效果很好。但是第二种方法什么也不返回。传递给第二个方法的值不是null。我需要获得传递给方法的文件的十六进制格式。为什么会这样呢?请解释一下。这是我的密码

代码语言:javascript
复制
public String binaryFile1(File file1){
        try{
        stringBuilder1=new StringBuilder();
        is1=new FileInputStream(file1);
        while(b!=-1){
            counter++;
            b=is1.read();
            String s = Integer.toHexString(b).toUpperCase();
        if (s.length() == 1) {
            stringBuilder1.append('0');
        }
            if(counter%5==0){
               stringBuilder1.append(s).append("\n");
               counter=0;
            }else
                stringBuilder1.append(s).append(' ');

        }
        is1.close();
        }catch(Exception e){
            e.printStackTrace();
        }

        return stringBuilder1.toString();
}


public String binaryFile2(File file2){
        try{
        stringBuilder2=new StringBuilder();
        is2=new FileInputStream(file2);
        while(b!=-1){
            counter++;
            b=is2.read(); //Here b does not get any content assigned.
            String s = Integer.toHexString(b).toUpperCase();
        if (s.length() == 1) {
            stringBuilder2.append('0');
        }
            if(counter%5==0){
               stringBuilder2.append(s).append("\n");
               counter=0;
            }else
                stringBuilder2.append(s).append(' ');
        }
        is2.close();
        }catch(Exception e){
            e.printStackTrace();
        }

        return stringBuilder2.toString(); //Here stringBuilder2 is null
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-17 05:33:57

由于b是共享的,并且您没有在binaryFile1之后重置它,所以在binaryFile2的开头仍然是-1。我建议你用,

代码语言:javascript
复制
int b;
while ((b = is2.read()) != -1) {
  // ...
}

编辑

当你完成任务时关闭你的资源是很重要的。我还建议您尽量限制变量范围。使用try-with-resources,您可以编写类似于

代码语言:javascript
复制
public String binaryFile2(File file) {
    StringBuilder sb = new StringBuilder();
    int counter = 0;
    try (InputStream is = new FileInputStream(file)) {
        int b;
        while ((b = is.read()) != -1) {
            counter++;
            String s = Integer.toHexString(b).toUpperCase();
            if (s.length() == 1) {
                sb.append('0');
            }
            sb.append(s);
            if (counter % 5 == 0) {
                sb.append(System.lineSeparator());
                counter = 0;
            } else {
                sb.append(' ');
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return sb.toString();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27518811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档