हाय मेरे पास स्मृति में एक BufferedImage इंस्टेंस है और इसे प्रदर्शन के लिए I/O ऑपरेशन के बिना बेस 64 स्ट्रिंग के रूप में एन्कोड करने के लिए बाइट [] में परिवर्तित करना चाहते हैं। मैं निम्नलिखित एपीआई का उपयोग किया गया था:BufferedImage को बाइट में कनवर्ट करें [] बिना I/O
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image,"png",baos);
return baos.toByteArray();
हालांकि, इस एपीआई अभी भी परोक्ष ओएस अस्थायी निर्देशिका, जिस स्थिति में विफलता के लिए नेतृत्व करेंगे करने के लिए छवि कि अंतर्निहित ओएस अस्थायी निर्देशिका भरा है लिखते हैं और अस्थायी फ़ाइल नहीं किया जा सकता बनाया था। स्टैक ट्रेस:
Caused by: java.io.IOException: No space left on device
at java.io.RandomAccessFile.write(RandomAccessFile.java:493)
at javax.imageio.stream.FileCacheImageOutputStream.write(FileCacheImageOutputStream.java:134)
at javax.imageio.stream.ImageOutputStreamImpl.write(ImageOutputStreamImpl.java:66)
at com.sun.imageio.plugins.png.PNGImageWriter.write_magic(PNGImageWriter.java:376)
at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1115)
at javax.imageio.ImageWriter.write(ImageWriter.java:628)
at javax.imageio.ImageIO.write(ImageIO.java:1480)
at javax.imageio.ImageIO.write(ImageIO.java:1554)
वहाँ एक कुशल (इन-स्मृति रूपांतरण या कुशल आई/ओ) की तरह जिस तरह से मैं बिना रूपांतरण करने के लिए है/हे? कृपया सलाह दें। जावाडोक के अनुसार
ImageIO.setUseCache(false);
यह डिफ़ॉल्ट रूप से चालू है:
मैं कर रहा हूँ .. यह कहा जाता है कि ऐसा होता है। –
यह लगभग निश्चित रूप से JVM में एक बग है। क्या आपने नवीनतम संस्करण की कोशिश की है? –
@ पीटर लेवरी: आप इसे एक बग क्यों मानते हैं? एक पूरी कक्षा है ['FileCacheImageOutputStream'] (http://docs.oracle.com/javase/7/docs/api/javax/imageio/stream/FileCacheImageOutputStream.html)। हालांकि मुझे 'इमेजियो' में इस तंत्र से अवगत नहीं था। –