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

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

用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条回答 默认 最新

  • renpeng301
    renpeng301 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]

    点赞 评论

相关推荐