All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.feilong.lib.compress.archivers.zip.UnrecognizedExtraField Maven / Gradle / Ivy

Go to download

feilong is a suite of core and expanded libraries that include utility classes, http, excel,cvs, io classes, and much much more.

There is a newer version: 4.0.8
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package com.feilong.lib.compress.archivers.zip;

import java.util.Arrays;

/**
 * Simple placeholder for all those extra fields we don't want to deal
 * with.
 *
 * 

* Assumes local file data and central directory entries are * identical - unless told the opposite. *

* * @NotThreadSafe */ public class UnrecognizedExtraField implements ZipExtraField{ /** * The Header-ID. */ private ZipShort headerId; /** * Set the header id. * * @param headerId * the header id to use */ public void setHeaderId(final ZipShort headerId){ this.headerId = headerId; } /** * Get the header id. * * @return the header id */ @Override public ZipShort getHeaderId(){ return headerId; } /** * Extra field data in local file data - without * Header-ID or length specifier. */ private byte[] localData; /** * Set the extra field data in the local file data - * without Header-ID or length specifier. * * @param data * the field data to use */ public void setLocalFileDataData(final byte[] data){ localData = ZipUtil.copy(data); } /** * Get the length of the local data. * * @return the length of the local data */ @Override public ZipShort getLocalFileDataLength(){ return new ZipShort(localData != null ? localData.length : 0); } /** * Get the local data. * * @return the local data */ @Override public byte[] getLocalFileDataData(){ return ZipUtil.copy(localData); } /** * Extra field data in central directory - without * Header-ID or length specifier. */ private byte[] centralData; /** * Set the extra field data in central directory. * * @param data * the data to use */ public void setCentralDirectoryData(final byte[] data){ centralData = ZipUtil.copy(data); } /** * Get the central data length. * If there is no central data, get the local file data length. * * @return the central data length */ @Override public ZipShort getCentralDirectoryLength(){ if (centralData != null){ return new ZipShort(centralData.length); } return getLocalFileDataLength(); } /** * Get the central data. * * @return the central data if present, else return the local file data */ @Override public byte[] getCentralDirectoryData(){ if (centralData != null){ return ZipUtil.copy(centralData); } return getLocalFileDataData(); } /** * @param data * the array of bytes. * @param offset * the source location in the data array. * @param length * the number of bytes to use in the data array. * @see ZipExtraField#parseFromLocalFileData(byte[], int, int) */ @Override public void parseFromLocalFileData(final byte[] data,final int offset,final int length){ setLocalFileDataData(Arrays.copyOfRange(data, offset, offset + length)); } /** * @param data * the array of bytes. * @param offset * the source location in the data array. * @param length * the number of bytes to use in the data array. * @see ZipExtraField#parseFromCentralDirectoryData(byte[], int, int) */ @Override public void parseFromCentralDirectoryData(final byte[] data,final int offset,final int length){ final byte[] tmp = Arrays.copyOfRange(data, offset, offset + length); setCentralDirectoryData(tmp); if (localData == null){ setLocalFileDataData(tmp); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy