我惊讶地发现,今天,我不能追查任何简单的方法的内容写入InputStream到OutputStreamJava中.显然,字节缓冲区代码并不难写,但我怀疑我只是遗漏了一些会让我的生活更轻松(代码更清晰)的东西.
那么,给定一个InputStream in和一个OutputStream out,是否有更简单的方法来编写以下内容?
byte[] buffer = new byte[1024];
int len = in.read(buffer);
while (len != -1) {
out.write(buffer, 0, len);
len = in.read(buffer);
}
Run Code Online (Sandbox Code Playgroud) 在我当前的项目中,我尝试添加BufferedImage一个PDFBox文档.更具体地说,我使用的是图像JFreeChart.我的代码看起来像这样:
public void exportToPDF(JFreeChart chart, String filePath){
PDDocument doc = null;
PDPage page = null;
PDXObjectImage ximage = null;
try {
doc = new PDDocument();
page = new PDPage();
doc.addPage(page);
PDPageContentStream content = new PDPageContentStream(doc, page);
BufferedImage image = chart.createBufferedImage(300, 300);
ximage = new PDJpeg(doc, image);
content.drawImage(ximage, 20, 20);
content.close();
} catch(IOException ie) {
}
doc.save(filePath);
doc.close();
}
Run Code Online (Sandbox Code Playgroud)
文档被创建; 我可以添加文本,但是我收到错误,指出图像没有足够的信息显示.
我有什么不对的任何线索?
我一直试图弄清楚如何使用new管道Java中的一些进程ProcessBuilder.我找不到一个合适的例子来说明我想做什么,当我尝试自己做这个过程时,这个过程就会挂起.我将非常感谢一些代码运行相当于cat test.txt | wc但不是通过shell的代码.
--Update--
好的,只是澄清一下.我知道有一些方法可以通过读写流来模拟管道.我想知道是否通过Java 7中引入的redirectInput和redirectOutput方法以某种自动方式完成.
我已经看到了两个关于SO的答案,声称Java提供的PipedInputStream和PipedOutputStream类是有缺陷的.但他们没有详细说明他们的错误.他们真的有缺陷,如果是这样的话?我正在编写一些使用它们的代码,所以我想知道我是否采取了错误的转向.
一个答案说:
PipedInputStream并且PipedOutputStream被打破(关于穿线).他们假设每个实例都绑定到一个特定的线程.这很奇怪.
对我来说,这似乎既不奇怪也不破碎.也许作者也有其他一些缺陷?
另一个答案说:
在实践中,最好避免使用它们.我已经用了13年一次,我希望自己没有.
但是那位作者无法回想起问题所在.
与所有类一样,尤其是在多个线程中使用的类,如果您滥用它们,则会遇到问题.所以我不考虑不可预知的"写入结束死"IOException是PipedInputStream可以抛出是一大败笔(无法close()连接的PipedOutputStream是一个错误,请参阅文章请告诉我这IOException异常:写入结束死了吗?,由丹尼尔·Ferbers,以获取更多信息).有什么其他声称的缺陷?
我需要使用JFreeChart生成图表,然后使用Apache PDFBOX将其导出为PDF 。我不想使用iText,因为它不能在专有软件中使用。
我搜索了整个Google,但没有运气!有人做过吗?