Có hai khái niệm trực giao ở đây:
- Chuyển đổi văn bản sang nhị phân, thường thông qua một
OutputStreamWriter
- Nén dữ liệu nhị phân, ví dụ sử dụng
GZIPOutputStream
Vì vậy, cuối cùng bạn sẽ muốn:
- Tạo một
OutputStream
mà ghi vào bất cứ nơi nào bạn muốn kết quả (ví dụ như một tập tin hoặc trong bộ nhớ thông qua một ByteArrayOutputStream
- Bọc rằng
OutputStream
trong một GZIPOutputStream
- Bó
GZIPOutputStream
trong một OutputStreamWriter
sử dụng charset thích hợp (ví dụ như UTF-8)
- Viết văn bản để
OutputStreamWriter
- Đóng tác giả, thao tác này sẽ tuôn ra và đóng mọi thứ khác.
Ví dụ:
FileOutputStream output = new FileOutputStream(fileName);
try {
Writer writer = new OutputStreamWriter(new GZIPOutputStream(output), "UTF-8"));
try {
writer.write(text);
} finally {
writer.close();
}
} finally {
output.close();
}
Lưu ý rằng tôi đang đóng output
thậm chí nếu chúng ta thất bại trong việc tạo ra các nhà văn, nhưng chúng tôi vẫn cần phải đóng writer
nếu mọi thứ đều thành công, để tuôn tất cả mọi thứ và kết thúc ghi dữ liệu.
Nguồn
2011-05-13 16:12:24
Tôi đã thử sử dụng ByteArrayOutputStream, nhưng ví dụ của bạn hoạt động hoàn hảo. Cảm ơn bạn – Luistar15
@ user752679: Ban đầu tôi đã viết một mẫu bằng cách sử dụng ByteArrayOutputStream, nhưng khi câu hỏi của bạn cho biết bạn muốn viết nó vào một tệp ... –