Каков самый маленький, законный файл почтового индекса / фляги? - PullRequest
3 голосов
/ 13 марта 2010

Я ненавижу генерировать исключение для вещей, которые я могу просто проверить с помощью оператора if. Я знаю, что zip / jar нулевой длины вызовет исключение, если вы попытаетесь получить к нему доступ через API java.util.zip/java.util.jar. Таким образом, кажется, что должен быть самый маленький файл, с которым эти утилиты API могут работать.

Ответы [ 6 ]

3 голосов
/ 13 марта 2010

Вы действительно должны поместить этот вид кода в try / catch, так как есть много вещей, которые могут пойти не так при чтении / записи файлов?

Если вы действительно должны знать ответ на этот вопрос, попробуйте добавить 1-байтовый файл в zip-файл и посмотрите, не получится ли это? Это простой код, чтобы пройти диапазон размеров от 1 до> 65536 байт, добавить в zip и посмотреть, какие из них потерпели неудачу?

2 голосов
/ 13 марта 2010

Согласно ZIP формат файла спецификации ZIP-файл должен по крайней мере иметь центральную структуру каталогов длиной 46 байтов + 3 переменных поля (проверьте спецификацию самостоятельно).

Возможно, нам следует принять хотя бы одну запись, которая подразумевает заголовок файла для этой записи.

2 голосов
/ 13 марта 2010

Jar-файлы должны иметь хотя бы одну запись. Если вы хотите сделать пустой, сделайте манифест только банкой.

См. http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html#JAR Манифест для получения дополнительной информации о манифестах банок.

1 голос
/ 20 марта 2010

Я написал быстрый тест, и самый маленький zip, который я мог создать, а затем прочитать с помощью API java.util.zip, составлял 118 байт. Может быть способ создать меньший zip-файл, совместимый со спецификацией и читаемый с помощью утилиты zip ...

0 голосов
/ 03 октября 2013
final static byte[] EmptyZip={80,75,05,06,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00};
public static void createEmptyZip(String path){
    try{
        FileOutputStream fos=new FileOutputStream(new File(path));
        fos.write(EmptyZip, 0, 22);
        fos.flush();
        fos.close();
    }catch (FileNotFoundException e){
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
0 голосов
/ 15 марта 2010

Наименьший допустимый почтовый индекс содержит ноль записей и один «пустой» центральный каталог.

Байты:

 80 75 05 06 

, за которым следуют 18 байтов нуля (0).

Итак, 22 байта.

VBscript для его создания:

Sub NewZip(pathToZipFile)

    WScript.Echo "Newing up a zip file (" & pathToZipFile & ") "

    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim file
    Set file = fso.CreateTextFile(pathToZipFile)

    file.Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, 0)
    file.Close

    Set fso = Nothing
    Set file = Nothing
    WScript.Sleep 500
End Sub


NewZip "Empty.zip"
...