Java系统命令调用、序列化、JDO

1.JAVA调用系统命令或可执行程序

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public classTest{
    Stringcmd1= "F:\\apache-tomcat-6.0.20.exe"; 
    Stringcmd2= "D:\\Program Files\\MicrosoftOffice\\OFFICE11\\WINWORD.EXE F:\\test.doc"; 
    Stringcmd3= "cmd.exe /c start F:\\test.doc"; 
   String cmd4= "ping www.baidu.com";
 
   publicvoidmethod() {
    Runtime run = Runtime.getRuntime();//返回与当前 Java应用程序相关的运行时对象 
        try { 
            Process p = run.exec(cmd4);//启动另一个进程来执行命令 
            BufferedInputStream in = newBufferedInputStream(p.getInputStream()); 
            BufferedReader inBr = new BufferedReader(newInputStreamReader(in)); 
            String lineStr; 
            while ((lineStr = inBr.readLine()) !=null) {
              //获得命令执行后在控制台的输出信息 
                System.out.println(lineStr);//打印输出信息 
            }
            //检查命令是否执行失败。 
            if (p.waitFor() != 0) { 
                if (p.exitValue() == 1)//p.exitValue()==0表示正常结束,1:非正常结束 
                    System.err.println("命令执行失败!"); 
            } 
            inBr.close(); 
            in.close(); 
        } catch (Exception e) {
        e.printStackTrace();
        }
   }
}

2.Java序列化(串行化)

   Java建立的一种传输机制,它能够把对象的信息转换成一系列的字节码,这些字节码可以被传输到网络或者存储到一个文件中。序列化的使用非常简单,但它还是有限制的。它必须立即存取对象的特征,而且它不适合存取大批量的数据。在更改一个对象的属性时如果有错误发生它无法实现“回滚”,因此不适于应用程序对数据完整性的要求,而且不能实现多个线程或程序异步读写数据。所有这些不足都使得序列化无法满足大多数数据存储要求。

1)串行化能保存的元素

串行化只能保存对象的非静态成员变量,不能保存任何成员方法和静态成员变量,而且串行化保存的只是变量的值,对于变量的任何修饰符都不能保存。若是想序列化和反序列化静态变量,可以让被序列化的类实现wrieObject(ObjectOuputStream);readObject(ObjectInputStream)把静态变量写入到输出流中,可以从输入流中读入,另外final static常量可以序列化。

a.永久性保存对象,保存对象的字节序列到本地文件中;

b.通过序列化对象在网络中传递对象;

c.通过序列化在进程间传递对象。 

2)串行化

将对象的状态保存下来,在需要时再将对象恢复。接口Serializable用来作为实现对象串行化的工具,只有实现了Serializable的类的对象才可以被串行化。

3)transient关键字

对于某些类型的对象,其状态是瞬时的,这样的对象是无法保存其状态的。例如一个Thread对象或一个FileInputStream对象 ,对于这些字段,我们必须用transient关键字标明,否则编译器将报错。

另外,串行化可能涉及将对象存放到磁盘上或在网络上传输数据,这时候就会产生安全问题。因为数据位于Java运行环境之外,不在Java安全机制的控制之中。对于需要保密的字段,不应保存在永久性介质中,或者不应简单地不加处理地保存下来 ,为了保证安全性。应该在这些字段前加上transient关键字,在一个特定对象的一个域上关闭serialization,表示此域不是该对象可串行化的一部分。

4)若父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;

5) 在Android开发中:

a.在使用内存的时候,Parcelable类比Serializable性能高,所以推荐使用Parcelable类。

b.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。

c.Parcelable不能使用在将数据存储在磁盘上的情况下,因为Parcelable不能很好的保证在外界有变化的情况下数据的持续性。尽管Serializable效率低点,也不提倡用,但   在这种情况下,还是建议你用Serializable。

3.JDO

  JDO 是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBCAPI的使用).这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上.另外,JDO很灵活,因为它可以在任何数据底层上运行.JDBC只是面向关系数据库(RDBMS)。JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强.

  JDO:JDO集成了很多上述持久性机制的特性,这使得在JDO中创建一个持久化(persistence)类就像创建一个序列化类一样简单。JDO支持批量数据的存储,数据一致性,并发处理和JDBC的查询功能。就像对象-关系映射软件和对象数据库一样,它允许使用面向对象的高级特性比如“继承”。它避免了像EJB(sun的服务器端组件模型,设计目标与核心应用是部署分布式应用程序)中实体Bean一样必须依赖于来自厂商定义的严格规范。同EJB一样,JDO也不规定任何特定的后端数据库。但是,这里还是要说一下,世界上没有“万灵丹”。所以,使用JDO并不是对于每一个应用程序都是有好处的。很多应用程序完全可以使用其他更理想的存储机制。


转自:http://www.cnblogs.com/devinzhang/archive/2012/02/09/2343771.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值