问: 对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中? 答: 目前,没有直接的方法可以将对象写入到随机存取文件中. 但是可以使用ByteArray输入/输出流作为中介,来向随机存取文件中写入或从随机存取文件中读出字节,并且可以利用字节流来创建对象输入/输出流,以用于读写对象.需要注意的是在字节流中要包含一个完整的对象,否则读写对象时将发生错误. 例如,java.io.ByteArrayOutputStream可用于获取ObjectOutputStream的字节流,从中可得到byte数组并可将之写入到随机存取文件中.相反,我们可以从随机存取文件中读出字节数组,利用它可构造ByteArrayInputStream,进而构造出ObjectInputStream,以读取对象. 问: 运行RMI应用时,可不可以不手工启动名字服务rmiregistry,而是从程序中启动之? 答: 可以. java.rmi包中提供了类java.rmi.registry.LocateRegistry,用于获取名字服务或创建名字服务.调用LocateRegistry.createRegistry(int port)方法可以在某一特定端口创建名字服务,从而用户无需再手工启动rmiregistry.此外,LocateRegistry.getRegistry(String host,int port)方法可用于获取名字服务. 问: 使用类PrintJob进行打印操作时,应如何设置打印机名等打印属性? 答: 使用如下方法可以获得PrintJob的实例用于控制打印操作: Toolkit.getPrintJob(Frame f, String jobtitle, Properties prop)
那么对于打印属性的设置可以通过对prop的属性设置来实现,打印属性包括: awt.print.destination: 可以是"printer"或"file" awt.print.printer: 打印机名 awt.print.fileName: 打印文件名 awt.print.numCopies: 打印份数 awt.print.options: 打印命令的打印选项 awt.print.orientation: 打印方向,可以是"portrait"或"landscape" awt.print.paperSize: 纸张大小,可以是"letter","legal","executive"或"a4" 问: 在JDK1.1中Thread类定义了suspend()和resume()方法,但是在JDK1.2中已经过时,应使用什么方法来替代之? 答: Thread.suspend本身易于产生死锁.如果一个目标线程对某一关键系统资源进行了加锁操作,然后该线程被suspend,那么除非该线程被resume,否则其它线程都将无法访问该系统资源.如果另外一个线程将调用resume,使该线程继续运行,而在此之前,它也需要访问这一系统资源,则将产生死锁. 因此,在Java 2中,比较流行的方式是定义线程的状态变量,并使目标线程轮询该状态变量,当状态为悬挂状态时,可以使用wait()方法使之处于等待状态.一旦需要该线程继续运行,其它线程会调用notify()方法来通知它.
|