首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java -将postscript直接发送到网络打印机时出现"ps:堆栈下溢“

java -将postscript直接发送到网络打印机时出现"ps:堆栈下溢“
EN

Stack Overflow用户
提问于 2018-02-14 01:51:43
回答 1查看 260关注 0票数 1

我编写了一段Java代码,通过套接字将PDF格式的postscript脚本发送到网络打印机。

这些文件打印得很完美,但每个作业都附带一到两页额外的文本,比如ps: stack underflowerror undefined offending command

一开始,我认为PDF2PS进程有问题,所以我尝试了这个PS Files中的2个PS文件。但问题仍然存在。

我还用GhostView验证了ps文件。现在我认为代码可能有问题。代码不会抛出任何异常。

这款打印机名为东芝e-Studion5005AC,支持PS3和PCL6。

代码语言:javascript
运行
复制
    File file = new File("/path/to/my.ps");

    Socket socket = null;
    DataOutputStream out = null;
    FileInputStream inputStream = null;
    try {
        socket = new Socket(printerIP, printerPort);
        out = new DataOutputStream(socket.getOutputStream());
        DataInputStream input = new DataInputStream(socket.getInputStream());
        inputStream = new FileInputStream(file);
        byte[] buffer = new byte[8000];

        while (inputStream.read(buffer) != -1) {
            out.write(buffer);

        }

        out.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-14 03:49:38

您正在将整个缓冲区写入输出流,而不管有多少实际内容。这意味着当你最后一次写buffer时,它很可能在缓冲区的末尾有一堆来自上一次迭代的内容。

示例

例如,假设您有以下文件,并使用大小为10的缓冲区:

代码语言:javascript
运行
复制
 1234567890ABCDEF

在第一次inputStream.read()调用之后,它将返回10,在缓冲区中,您将看到:

代码语言:javascript
运行
复制
 1234567890

在第二次inputStream.read()调用之后,它将返回6,在缓冲区中,您将看到:

代码语言:javascript
运行
复制
 ABCDEF7890

在第三次调用inputStream.read()之后,它将返回-1,您将停止读取。

打印机套接字最终将接收这些数据:

代码语言:javascript
运行
复制
1234567890ABCDEF7890

这里的最后一个7890是打印机不能理解的额外位,但它可以成功地解释第一个1234567890ABCDEF

修复

您应该考虑inputStream.read()返回的长度

代码语言:javascript
运行
复制
        byte[] buffer = new byte[8000];
        for (int length; (length = inputStream.read(buffer)) != -1; ){
            out.write(buffer, 0, length);
        }

还可以考虑使用try-with-resources来避免未关闭的流出现问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48772753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档