Java 将BuffereImage传递到用于映像文件的FileInputStream

Java 将BuffereImage传递到用于映像文件的FileInputStream,java,bufferedimage,fileinputstream,Java,Bufferedimage,Fileinputstream,我有两段独立的代码需要一起工作,一段是我自己写的,另一段是另一个项目的。我基本上有一个项目的一部分是创建缓冲图像。下面是其中的一个片段: BufferedImage screenshot = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); 在另一个软件中,它接受一个图像文件,然后作为JSON/POST数据传递给另一个服务。这里是它接受文件的地方: try(I

我有两段独立的代码需要一起工作,一段是我自己写的,另一段是另一个项目的。我基本上有一个项目的一部分是创建缓冲图像。下面是其中的一个片段:

BufferedImage screenshot = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
在另一个软件中,它接受一个图像文件,然后作为JSON/POST数据传递给另一个服务。这里是它接受文件的地方:

try(InputStream file = new FileInputStream("temp.png")) {
                sendFile(out, "file", file, "temp.png");
            }
我在Java中使用图像方面没有太多经验,我目前的解决方案是让第一个程序将BuffereImage写入如下文件:

File tempFile = new File("/", "temp.png");
ImageIO.write(screenshot, "PNG", tempFile);

然后,第二段代码能够正确地处理它。问题产生于需要删除临时文件以及由此产生的问题。有什么办法可以简化这一点吗?提前感谢。

由于@Mas和评论者的链接,找到了解决方案

第一组代码添加了一个名为“screenshotOutput”的ByteArrayOutputStream

第二组代码被修改为接受ByteArrayInput流

try(InputStream file = new ByteArrayInputStream(screenshotOutput.toByteArray());) {
                sendFile(out, "file", file, "temp.png");
            }

这解决了我的问题。再次感谢昨天的评论者。

那么其他程序需要将图像作为文件接收吗?或者它可以接受类似ByTestStream的内容吗?看起来sendFile方法不一定需要“文件”,而是需要“InputStream”。所以你可以试着创建一个像这样的:。@EvanEdwards如果你能可靠地知道一个文件何时被使用,是的,你可以自己删除它们。但是,如果这两个服务都在持续运行,则最好重构以使用流。:-)@EvanEdwards,听起来像是将它们保存在一个“内存文件”中,换句话说,通过ByteArrayInput/OutputStream的ByteArray可能是完美的。听起来不错,谢谢大家的帮助。明天早上我会读更多的,并尝试解决这个问题!
try(InputStream file = new ByteArrayInputStream(screenshotOutput.toByteArray());) {
                sendFile(out, "file", file, "temp.png");
            }