安卓数据存储补充:XML序列化

序列化

  • 序列化是将对象状态转换为可保存或传输的格式的过程。我们可以把对象序列化为不同的格式,比如说:JSon序列化、XML序列化、二进制序列化等等,不同的形式适应不同的业务需求。

XML序列化

  • 把对象的成员变量转化为XML格式,需要使用Xml序列化器(XmlSerializer类),序列化之后的对象以XML文件的形式保存。
    public class Person {
          
            
        private int id;  
        private String age;  
        private String name;  
    
        public int getId() {
          
            
           return id;  
       }  
    
       public void setId(int id) {
          
            
          this.id = id;  
       }  
    
       public String getAge() {
          
            
          return age;  
       }  
    
       public void setAge(String age) {
          
            
           this.age = age;  
       }  
    
       public String getName() {
          
            
           return name;  
       }  
    
       public void setName(String name) {
          
            
            this.name = name;  
       }  
    
       @Override  
       public String toString() {
          
            
           return "Person [id=" + id + ", age=" + age + ", name=" + name + "]";  
       }  
    
    }
    
  • Person类,对应的该类有若干实例对象:{id=0;name=“张三”;age=20},{id=1;name=“李四”;age=19},把这些对象以xml格式进行描述,即为:
    <?xml version="1.0" encoding="UTF-8" standalone="true"?>
    <persons>
        <person id="0">
            <name>张三</name>
            <age>20</age>
        </person>
        <person id="1">
            <name>李四</name>
            <age>19</age>
        </person>
    </persons>
    
  • 要将数据序列化,首先要做的是创建与该XML相对应的序列化器,然后将Person对象转换为上述的XML格式

关键代码如下

  • 首先因为XML格式是以文件形式进行存放的,所以,应首先创建文件对象
    //Environment.getExternalStorageDirectory()为文件的存放位置
    File file = new File(Environment.getExternalStorageDirectory(),"Person.xml");
    
  • 然后,打开文件的输出流:
    //file为上面生成的文件对象
    FileOutputStream fos = new FileOutputStream(file);
    
  • 接着,创建与xml相对应的序列化器:
    XmlSerializer serializer = Xml.newSerializer();
    

通过序列化器对转换进行操作:

  • 设置文件编码方式:serializer.setOutput(fos,"utf-8");//fos为文件输出流对象
  • 写入xml文件的开始标签:serializer.startDocument("utf-8",true); 第一个参数设置文档的编码格式,第二个参数设置是否是一个独立的文档,一般设置为true
  • 依次写入各元素(如果有多个元素则可以使用迭代的方式写入,如果标签是嵌套的,则在写入顺序上也是嵌套的):
    1. 写入开始标签:serializer.startTag(null,"Persons"); 这里第一个参数为xml的命名空间,没有可以用null,第二个参数为标签名
    2. 如果该标签有属性:serializer.attribute(null,"id",1);其中第一个参数为命名空间,第二个参数是属性名,第三个参数为属性值
    3. 写入元素内容:serializer.text(person.getName());该参数为实例对象中的某个属性值
    4. 写入结束标签:serializer.endTag(null,"Persons");第一个参数为命名空间,一般为null即可,第二个参数为结束标签的标签名以这个语句表示文档的写入结束:serializer.endDocument()
    5. 通过serializer.flush()将流写入文件中
  • 最后,关闭输出流:fos.close()

猜你喜欢

转载自blog.csdn.net/yang2330648064/article/details/131281993