Kstar_Ming_闫 2021-04-06 16:19 采纳率: 0%
浏览 78

ZipFile中ZipOutputStream.EOCD_SIG字段代表什么意思

 if (off >= 0L) {
            this.archive.seek(off);
            sig = ZipOutputStream.EOCD_SIG;

            for(int curr = this.archive.read(); curr != -1; curr = this.archive.read()) {
                if (curr == sig[0]) {
                    curr = this.archive.read();
                    if (curr == sig[1]) {
                        curr = this.archive.read();
                        if (curr == sig[2]) {
                            curr = this.archive.read();
                            if (curr == sig[3]) {
                                found = true;
                                break;
                            }
                        }
                    }
                }

如上,代码为ZipFile.class中的positionAtCentralDirectory()方法,请问:代码中的ZipOutputStream.EOCD_SIG字段代表什么意思?this.archive.read()又代表什么意思?为什么这两个要进行值匹配?谢谢!!!

  • 写回答

1条回答 默认 最新

  • Kstar_Ming_闫 2021-04-06 16:20
    关注
    private void positionAtCentralDirectory() throws IOException {
            boolean found = false;
            long off = this.archive.length() - 22L;
            byte[] sig;
            if (off >= 0L) {
                this.archive.seek(off);
                sig = ZipOutputStream.EOCD_SIG;
    
                for(int curr = this.archive.read(); curr != -1; curr = this.archive.read()) {
                    if (curr == sig[0]) {
                        curr = this.archive.read();
                        if (curr == sig[1]) {
                            curr = this.archive.read();
                            if (curr == sig[2]) {
                                curr = this.archive.read();
                                if (curr == sig[3]) {
                                    found = true;
                                    break;
                                }
                            }
                        }
                    }
    
                    this.archive.seek(--off);
                }
            }
    
            if (!found) {
                throw new ZipException("archive is not a ZIP archive");
            } else {
                this.archive.seek(off + 16L);
                sig = new byte[4];
                this.archive.readFully(sig);
                this.archive.seek(ZipLong.getValue(sig));
            }
        }
    评论

报告相同问题?