ito_oti 2011-08-12 21:15
浏览 327
已采纳

如何防止发到打印机的数据不会因超过打印机数据缓冲上限而丢失?

用java写了一个程序,用来将文本文件打印出来.代码如下:

package MyTest;

import gnu.io.*;
import java.io.*;

public class comm_test02 {
public static void main(String[] args) {
try {
(new comm_test02()).run(args[0]);
} catch (Exception ex) {
ex.printStackTrace();
}
}

private void run(String filename) throws Exception {
    BufferedReader br = new BufferedReader(
        new FileReader(
            new File(filename)
        )
    );

    String line = null;
    String lines = "";
    while ((line = br.readLine()) != null) {
        lines = lines.concat(line).concat("\n");
    }

    CommPortIdentifier cpi = CommPortIdentifier.getPortIdentifier("/dev/lp0");
    CommPort cp = cpi.open("sez", 50);
    ParallelPort pp = null;
    if (cp instanceof ParallelPort) {
        pp = (ParallelPort) cp;
    }

    OutputStream os = pp.getOutputStream();
    os.write(lines.getBytes("GBK"));
    os.flush();
    os.close();
    pp.close();
}

}

上面程序用来打印简短的文件没有问题,但要打印的文件如果很大,后部分内容会打不出来.查了一下打印机的说明发现它只能缓冲2KB的数据,因此我猜测是上面的程序将所有打印数据一下子发给打印机,超出其容量的数据则被丢弃了.

想请教一下各位,我的猜想是否正确?有什么方法可以保证即使文件很大也可用这种打印机全部打出来?

谢谢各位.

  • 写回答

1条回答 默认 最新

  • laopeng301 2011-08-12 21:41
    关注

    [code="java"]
    NIO缓存读写文件啊···
    设置缓存的大小为2*1024

    private void run(String filename) throws Exception {
    FileInputStream fils=new FileInputStream(fils);
    //得到文件通道
    FileChannel fc=fils.getChannel();
    //设定缓存区大小
    ByteBuffer bf=ByteBuffer.allocate(2.1024);

        while (fc.read(bf) != -1) { 
    
    
    
        CommPortIdentifier cpi = CommPortIdentifier.getPortIdentifier("/dev/lp0"); 
        CommPort cp = cpi.open("sez", 50); 
        ParallelPort pp = null; 
        if (cp instanceof ParallelPort) { 
            pp = (ParallelPort) cp; 
        } 
           bf.flip(); 
     OutputStream os = pp.getOutputStream(); 
    

    while(bf.hasRemaining){
    os.write(lines.getBytes(bf.get()));

    }
    bf.clear();
    }
    }
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测