【问题标题】:Skip bytes in ByteArray Java在 ByteArray Java 中跳过字节
【发布时间】:2015-08-30 18:40:31
【问题描述】:

我的应用程序读取一个类似 png 的文件(以字节为单位)并将字节存储到一个 byteArray 中。 这是我使用的方法:

public static byte[] read(File file) throws IOException {

        byte []buffer = new byte[(int) file.length()];
        InputStream ios = null;
        try {
            ios = new FileInputStream(file);
            if ( ios.read(buffer) == -1 ) {
                throw new IOException("EOF reached while trying to read the whole file");
            }        
        } finally { 
            try {
                 if ( ios != null ) 
                      ios.close();
            } catch ( IOException e) {
            }
        }

        return buffer;
    }

之后,我想提取那个 byteArray 的模式。

它遵循 png 文件的模式:
4 字节长度 + 4 字节类型 + 数据(可选)+ CRC 并重复该方案。

我想做类似 do while 的事情:读取长度 + 类型。如果我对类型不感兴趣,我想跳过那个块。 但我很挣扎,因为我找不到任何 skip 方法 用于 byteArray[]。

有人知道如何进行吗?

【问题讨论】:

    标签: java png bytearray skip


    【解决方案1】:

    您是否尝试过使用 ByteArrayInputStream http://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayInputStream.html?有跳过方法

    【讨论】:

    • 我之前看过这堂课。但我不知道如何使用它。我必须将我的 FileInputStream 替换为我的 ByteArrayInputStream 吗?
    • 如果 FileInputStream 中没有什么对你很重要,你可以替换它,它们都具有相同的超类。这对你来说足够了吗tutorialspoint.com/java/io/bytearrayinputstream_skip.htm
    • 是的,感谢您的帮助。我在做这个工作。会给你一个反馈! ;)
    • 我终于设法让它工作得更快。 (之前:7 秒,现在:0,4 秒)我现在只有一个小问题:我在这个条件下做了一段时间:如果块是 end_chunk,那么它就结束了。事情很好,但如果它是一个损坏的文件(没有结束),那将循环并且不会停止,因为我的文件没有结束块。我怎样才能超越它?非常感谢你!
    • stackoverflow.com/questions/2295221/… 也许这会对你有所帮助 :) 很高兴到目前为止我已经帮助了你 :)
    【解决方案2】:

    如果您想在一段时间内遍历数组,并且需要在给定条件下跳到下一次迭代,您可以使用标签 continue 跳到循环的下一次迭代。

    语法如下:

    do {
        if (condition) {
            continue;
        }
        // more code here that will only run if the condition is false
    } while(whatever you use to iterate over your array);
    

    【讨论】:

    • 这是我的想法。但我不知道如何填补白色的论点。目前,我制作了一个“for 循环”,它增加每个字节的字节数并搜索 4 字节类型。但是这个循环太慢了:一个 20Mb 的文件需要 7 秒。 (我有 250Mb 文件要读取)
    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多