Wygenerowałem wiele buforów obrazów w pamięci i chcę skompresować je do jednego pliku zip przed wysłaniem go jako załącznika wiadomości e-mail. Jak zapisać pliki do zip bez czytania plików z dysku.Jak mogę wygenerować plik zip bez zapisywania go na dysku przy pomocy Javy?
Czy istnieje sposób, w jaki mogę skompresować te pliki bez tworzenia pliku tymczasowego?
Zapisywanie na dysk jest czasochłonne ze względu na tysiące tworzonych plików.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cccprog;
import java.awt.Component;
import java.awt.Panel;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
/**
*
* @author Z
*/
public class N {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++) {
JFrame jf = new JFrame();
Panel a = new Panel();
JRadioButton birdButton = new JRadioButton();
birdButton.setSize(100, 100);
birdButton.setSelected(true);
jf.add(birdButton);
getSaveSnapShot(birdButton, i + ".bmp");
}
}
public static BufferedImage getScreenShot(Component component) {
BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
// paints into image's Graphics
component.paint(image.getGraphics());
return image;
}
public static void getSaveSnapShot(Component component, String fileName) throws Exception {
BufferedImage img = getScreenShot(component);
// BufferedImage img = new BufferedImage(image.getWidth(),image.getHeight(),BufferedImage.TYPE_BYTE_BINARY);
// write the captured image as a bmp
ImageIO.write(img, "bmp", new File(fileName));
}
}
Spójrz na java.utli.zip. –
Tylko dla mojej ciekawości, dlaczego chcesz uniknąć tworzenia pliku tymczasowego? –
To wydaje się powiązane http://stackoverflow.com/questions/7108035/how-to-flush-the-zipoutputstream-periodically-in-java – Ted