2

我对java很陌生,昨天才开始。由于我非常喜欢边做边学,所以我正在用它做一个小项目。但我被困在这一部分。我用这个函数写了一个文件:

public static boolean writeZippedFile(File destFile, byte[] input) {
    try {
        // create file if doesn't exist part was here
        try (OutputStream out = new DeflaterOutputStream(new FileOutputStream(destFile))) {
            out.write(input);
        }
        return true;

    } catch (IOException e) {
        // error handlind was here 
    }
}

现在我已经成功地使用上述方法编写了一个压缩文件,我想将它读回控制台。首先,我需要能够读取解压缩的内容并将该内容的字符串表示形式写入控制台。但是,我有第二个问题,我不想将字符写到第一个\0空字符。这是我尝试读取压缩文件的方式:

try (InputStream is = new InflaterInputStream(new FileInputStream(destFile))) {

}

我完全被困在这里。问题是,如何丢弃前几个字符直到 '\0',然后将解压文件的其余部分写入控制台。

4

2 回答 2

0

使用InputStream#read()跳过前几个字符

while (is.read() != '\0');
于 2013-08-08T18:34:13.943 回答
0

我了解您的数据包含文本,因为您想打印字符串表示。我进一步假设文本包含 unicode 字符。如果这是真的,那么您的控制台也应该支持 unicode 才能正确显示字符。

因此,您应该首先逐字节读取数据,直到遇到\0字符,然后您可以使用 aBufferedReader将其余数据打印为文本行。

try (InputStream is = new InflaterInputStream(new FileInputStream(destFile))) {

    // read the stream a single byte each time until we encounter '\0'
    int aByte = 0;
    while ((aByte = is.read()) != -1) {
        if (aByte == '\0') {
            break;
        }
    }

    // from now on we want to print the data
    BufferedReader b = new BufferedReader(new InputStreamReader(is, "UTF8"));
    String line = null;
    while ((line = b.readLine()) != null) {
        System.out.println(line);
    }
    b.close();         

} catch(IOException e) { // handle }
于 2013-08-08T20:26:06.637 回答