2009-02-15

最近实际项目过程中的一些经验

  连续做了两个小型项目,累计了4000多行的java代码,自然也从中获得了一些实践经验。

  1. 关于java.lang.process:
    用这个类来产生子进程是不错,不过我发现只要我不获取子进程的输出流(getInputStream),我调用的mencoder就会挂死在那里,查了一下文档:创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin,stdout,stderr)操作都将通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁。所以,只需要接受输出流并不处理就好了,注意stdout对应的是getInputStream
  2. 远程方法调用(RMI)获得了一个服务器上的对象但是如果这个对象包含了所谓的static field 静态字段的话,客户端上这个静态类字段是空的,如果一定要用到它的话,在客户端实例化一次这个类就好。
  3. rmi获得的对象如果是null的话,会被认为是异常
  4. 扫描文件获得参数需要比较繁琐的字符串操作,应该找到一种更加简单的方法。
  5. process.waitfor()方法应该放在输入输出和错误流的后面,否则程序会一直阻塞到执行结束,而且还可能产生缓冲区满了导致调用的外部进程挂起.

没有评论: