You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何向创建的子进程传入内存中的数据?

Java进程向外部程序传入内存数据的实现方案

一、向Notepad传入内存中文本数据

Windows自带的记事本支持从标准输入读取内容并显示,所以可以通过Java进程的OutputStream(对应子进程的标准输入)直接写入内存中的文本。修改后的代码如下:

import java.io.OutputStream;
import java.nio.charset.StandardCharsets;

public class NotepadInputDemo {
    public static void main(String[] args) {
        // 内存中的目标文本
        String textToShow = "这是要在记事本显示的内存文本\n第二行内容";
        
        try {
            // 启动记事本进程
            Process p = Runtime.getRuntime().exec("notepad.exe");

            // 用try-with-resources自动管理流,避免资源泄漏
            try (OutputStream out = p.getOutputStream()) {
                // 按UTF-8编码写入文本,避免乱码
                out.write(textToShow.getBytes(StandardCharsets.UTF_8));
                out.flush();
            }

            // 可选:等待记事本进程结束后再继续执行
            int exitCode = p.waitFor();
            System.out.println("记事本退出码: " + exitCode);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

关键注意点:

  • 必须指定编码(比如UTF-8),否则记事本可能出现乱码
  • 写入后要调用flush()并关闭流,让记事本知道输入已完成,否则它会一直等待输入

二、向PDF阅读器传入内存中的PDF数据

大部分主流PDF阅读器(如Adobe Acrobat、Foxit Reader)不支持这种方式,原因如下:

  • PDF格式需要随机访问文件内容(比如跳转页码、读取元数据),而标准输入是流式的,无法高效实现随机访问
  • 这类阅读器的命令行参数仅支持传入文件路径,没有设计从标准输入读取PDF的逻辑

如果必须避免将PDF写入文件,可行的替代方案是:

  • 使用Java原生PDF渲染库(如PDFBox、iText)直接在Java程序中渲染并显示PDF,无需启动外部进程
  • 极少数小众轻量级PDF查看器可能支持从stdin读取数据,但兼容性极差,不适合生产环境使用

内容的提问来源于stack exchange,提问作者Darian Pudic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:25:18