В основном у меня довольно длинный текст, мне нужно сжать его, сохранить в файле и прочитать позже. вот что я сделал.
public static void outCompressNIO(String outFile, String src) {
FileChannel fc = null;
GZIPOutputStream gz = null;
try {
fc = new FileOutputStream(outFile).getChannel();
gz = new GZIPOutputStream(Channels.newOutputStream(fc));
gz.write(src.getBytes());
gz.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
gz.close();
fc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void inCompressNIO(String inFile) {
FileChannel fc = null;
GZIPInputStream gz = null;
try {
fc = new FileInputStream(inFile).getChannel();
gz = new GZIPInputStream(Channels.newInputStream(fc));
byte fileContent[] = new byte[1024];
StringBuilder sb = new StringBuilder();
while ((gz.read(fileContent)) != -1) {
sb.append(new String(fileContent));
}
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
gz.close();
fc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Но строка, которую я получил из сжатого файла, отличается от оригинальной с места на место. Кто-нибудь знает почему? Кстати, моя главная цель состоит в том, чтобы мне нужно было эффективно сжать длинную строку (около 15 МБ) в файл и распаковать ее в основную память на Android. Я пытался просто использовать Object IO в Java, чтобы добиться этого, это достигается без проблем на моем компьютере. Но на андроиде, если строковый объект больше чем 3M, требуется целое время, чтобы привести объект, который я получил от ObjectInputStream к String. Поэтому я пробую другие способы избежать кастинга. Вышесказанное является одной из моих попыток, но, поскольку я мало знаю о NIO, я, вероятно, все делаю неправильно, поэтому кто-нибудь знает более эффективный способ достижения этого, пожалуйста, укажите мне правильное направление, большое спасибо.