XStream學習手冊_租車

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

日本、大陸,發現這些先進的國家已經早就讓電動車優先上路,而且先進國家空氣品質相當好,電動車節能減碳可以減少空污

一、前言

1、XStream官網

    http://x-stream.github.io

2、XStream是什麼

    XStream是一個簡單的基於Java的類庫,用來將Java對象序列化成XML(JSON)或反序列化為對象(即:可以輕易的將Java對象和XML文檔相互轉換)

3、XSteam能幹什麼

    XStream在運行時使用Java反射機制對要進行序列化的對象樹的結構進行探索,並不需要對對象作出修改。XStream可以序列化內部字段,包括私private和final字段,並且支持非公開類以及內部類。

    在缺省情況下,XStream不需要配置映射關係,對象和字段將映射為同名XML元素。但是當對象和字段名與XML中的元素名不同時,XStream支持指定別名。XStream支持以方法調用的方式,或是Java 標註的方式指定別名。

    XStream在進行數據類型轉換時,使用系統缺省的類型轉換器。同時,也支持用戶自定義的類型轉換器。

4、XStream特點

  • 使用方便 – XStream的API提供了一個高層次外觀,以簡化常用的用例

  • 無需創建映射 – XStream的API提供了默認的映射大部分對象序列化

  • 性能  – XStream快速和低內存佔用,適合於大對象圖或系統

  • 乾淨的XML  – XStream創建一個乾淨和緊湊XML結果,這很容易閱讀

  • 不需要修改對象 – XStream可序列化的內部字段,如private和final字段,支持非公開類和內部類。默認構造函數不是強制性的要求

  • 完整對象圖支持 – XStream允許保持在對象模型中遇到的重複引用,並支持循環引用

  • 可自定義的轉換策略 – 定製策略可以允許特定類型的定製被表示為XML的註冊

  • 安全框架 – XStream提供了一個公平控制有關解組的類型,以防止操縱輸入安全問題

  • 錯誤消息 – 出現異常是由於格式不正確的XML時,XStream拋出一個統一的例外,提供了詳細的診斷,以解決這個問題

  • 另一種輸出格式 – XStream支持其它的輸出格式,如JSON

5、XStream常見的用途

    傳輸、持久化、配置、單元測試

二、XStream入門

1、添加XSteam依賴

<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.12</version> </dependency> <dependency> <groupId>org.codehaus.jettison</groupId> <artifactId>jettison</artifactId> <version>1.4.1</version> </dependency>

2、XStream基本使用

package io.github.xstream.test01; ​ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; import lombok.AllArgsConstructor; import lombok.ToString; ​ public class XStreamTest01 { public static void main(String[] args) { Student student = new Student("張三", 20); XStream xStream = new XStream();//需要XPP3庫 //XStream xStream = new XStream(new DomDriver());//不需要XPP3庫 //XStream xStream = new XStream(new StaxDriver());//不需要XPP3庫開始使用Java 6 //XML序列化 String xml = xStream.toXML(student); System.out.println(xml); //XML反序列化 student = (Student) xStream.fromXML(xml); System.out.println(student); ​ xStream = new XStream(new JettisonMappedXmlDriver()); xStream.setMode(XStream.NO_REFERENCES); //Json序列化 String json = xStream.toXML(student); System.out.println(json); //Json反序列 student = (Student) xStream.fromXML(json); System.out.println(student); } } ​ @AllArgsConstructor @ToString class Student { private String name; private int age; }

3、程序運行結果

<io.github.xstream.test01.Student>
  <name>張三</name>
  <age>20</age>
</io.github.xstream.test01.Student>
Security framework of XStream not initialized, XStream is probably vulnerable.
Student(name=張三, age=20)
{"io.github.xstream.test01.Student":{"name":"張三","age":20}}
Student(name=張三, age=20)
Security framework of XStream not initialized, XStream is probably vulnerable.

注意:文中使用到的Lombok註解,Lombok依賴自行添加;XStream序列化XML時需要引用的jar包:xstream-[version].jar、xpp3-[version].jar、xmlpull-[version].jar,當引入xstream依賴後會自動依賴xpp3、xmlpull依賴。XStream序列化JSON需要引用的jar包:jettison-[version].jar。

    使用XStream序列化時,對JavaBean沒有任何限制。JavaBean的字段可以是私有的,也可以沒有getter或setter方法,還可以沒有默認的構造函數。

    XStream序列化XML時可以允許用戶使用不同的XML解析器,用戶可以使用一個標準的JAXP DOM解析器或自Java 6集成STAX解析器。這樣用戶就不需要依賴xpp3-[version].jar。

三、XStream混疊

1、混疊是一種技術來定製生成XML或者使用XStream特定的格式化XML。假設,一個下面的XML格式是用於序列化/反序列化Student對象。

<student name="張三"> <phone> <brand>小米</brand> <description>小米手機的描述</description> </phone> <phone> <brand>蘋果</brand> <description>蘋果手機的描述</description> </phone> </student>

2、根椐上面的XML格式,我們創建實體類

@AllArgsConstructor @ToString class Student { private String studentName; private List<Phone> phones; } ​ @AllArgsConstructor @ToString class Phone { private String brand; private String description; }

3、執行代碼

package io.github.xstream.test02; ​ import com.thoughtworks.xstream.XStream; import lombok.AllArgsConstructor; import lombok.ToString; ​ import java.util.ArrayList; import java.util.List; ​ public class XStreamTest02 { public static void main(String[] args) { List<Phone> phones = new ArrayList<>(); phones.add(new Phone("小米手機", "小米手機的描述")); phones.add(new Phone("蘋果手機", "蘋果手機的描述")); Student student = new Student("張三", phones); ​ XStream xStream = new XStream();//需要XPP3庫 //XML序列化 String xml = xStream.toXML(student); System.out.println(xml); } } ​ @AllArgsConstructor @ToString class Student { private String studentName; private List<Phone> phones; } ​ @AllArgsConstructor @ToString class Phone { private String brand; private String description; }

4、驗證輸出

<io.github.xstream.test02.Student> <studentName>張三</studentName> <phones> <io.github.xstream.test02.Phone> <brand>小米手機</brand> <description>小米手機的描述</description> </io.github.xstream.test02.Phone> <io.github.xstream.test02.Phone> <brand>蘋果手機</brand> <description>蘋果手機的描述</description> </io.github.xstream.test02.Phone> </phones> </io.github.xstream.test02.Student>

    在上面的結果,我們已經看到了Student對象名稱是完全合格的。要替換它作為學生的標籤,按照四、XStream類混疊的步驟

    另外,在上述結果中可以看出,所需studentName要重命名來命名。要替換它,按照五、XStream字段混疊的步驟

    在上面的結果,我們可以看到手機標記被添加成為手機列表。替換它,按照六、XStream隱式集合混疊的步驟

    在上面的結果,我們可以看到這個名字來作為一個子節點,需要將它作為根節點的屬性。替換它,按照七、XStream屬性混疊的步驟

四、XStream類混疊

1、類混疊是用來創建一個類的XML完全限定名稱的別名。讓我們修改XStreamTest02例子,將下面的代碼添加到XStreamTest02例子裏面

xStream.alias("student", Person02.class); xStream.alias("phone", Phone.class);

2、執行代碼

package io.github.xstream.test02; ​ import com.thoughtworks.xstream.XStream; import lombok.AllArgsConstructor; import lombok.ToString; ​ import java.util.ArrayList; import java.util.List; ​ public class XStreamTest02 { public static void main(String[] args) { List<Phone> phones = new ArrayList<>(); phones.add(new Phone("小米手機", "小米手機的描述")); phones.add(new Phone("蘋果手機", "蘋果手機的描述")); Student student = new Student("張三", phones); ​ XStream xStream = new XStream();//需要XPP3庫 xStream.alias("student", Student.class); xStream.alias("phone", Phone.class); ​ //XML序列化 String xml = xStream.toXML(student); System.out.println(xml); } } ​ @AllArgsConstructor @ToString class Student { private String studentName; private List<Phone> phones; } ​ @AllArgsConstructor @ToString class Phone { private String brand; private String description; }

3、執行結果

<student> <studentName>張三</studentName> <phones> <phone> <brand>小米手機</brand> <description>小米手機的描述</description> </phone> <phone> <brand>蘋果手機</brand> <description>蘋果手機的描述</description> </phone> </phones> </student>

可以看到<io.github.xstream.test02.Student>和<io.github.xstream.test02.Phone>分別被修改為了<student>和<phone>

五、XStream字段混疊

1、字段混疊用於創建以XML字段的別名。讓我們再次修改原來的XStreamTest02例子,將下面的代碼添加到XStreamTest02例子裏面

xStream.aliasField("name", Student.class, "studentName");

2、執行代碼

package io.github.xstream.test02; ​ import com.thoughtworks.xstream.XStream; import lombok.AllArgsConstructor; import lombok.ToString; ​ import java.util.ArrayList; import java.util.List; ​ public class XStreamTest02 { public static void main(String[] args) { List<Phone> phones = new ArrayList<>(); phones.add(new Phone("小米手機", "小米手機的描述")); phones.add(new Phone("蘋果手機", "蘋果手機的描述")); Student student = new Student("張三", phones); ​ XStream xStream = new XStream();//需要XPP3庫 xStream.alias("student", Student.class); xStream.alias("phone", Phone.class); xStream.aliasField("name", Student.class, "studentName"); ​ //XML序列化 String xml = xStream.toXML(student); System.out.println(xml); } } ​ @AllArgsConstructor @ToString class Student { private String studentName; private List<Phone> phones; } ​ @AllArgsConstructor @ToString class Phone { private String brand; private String description; }

3、執行結果

<student> <name>張三</name> <phones> <phone> <brand>小米手機</brand> <description>小米手機的描述</description> </phone> <phone> <brand>蘋果手機</brand> <description>蘋果手機的描述</description> </phone> </phones> </student>

可以看到<studentName>被修改為了<name>

六、XStream隱式集合混疊

1、隱式集合混疊時使用的集合是表示在XML無需显示根。例如,在我們的例子中,我們需要一個接一個,但不是在根節點來显示每一個節點。讓我們再次修改原來的XStreamTest02例子,將下面的代碼添加到XStreamTest02例子裏面

xStream.addImplicitCollection(Student.class, "phones");

2、執行代碼

package io.github.xstream.test02; ​ import com.thoughtworks.xstream.XStream; import lombok.AllArgsConstructor; import lombok.ToString; ​ import java.util.ArrayList; import java.util.List; ​ public class XStreamTest02 { public static void main(String[] args) { List<Phone> phones = new ArrayList<>(); phones.add(new Phone("小米手機", "小米手機的描述")); phones.add(new Phone("蘋果手機", "蘋果手機的描述")); Student student = new Student("張三", phones); ​ XStream xStream = new XStream();//需要XPP3庫 xStream.alias("student", Student.class); xStream.alias("phone", Phone.class); xStream.aliasField("name", Student.class, "studentName"); xStream.addImplicitCollection(Student.class, "phones"); ​ //XML序列化 String xml = xStream.toXML(student); System.out.println(xml); } } ​ @AllArgsConstructor @ToString class Student { private String studentName; private List<Phone> phones; } ​ @AllArgsConstructor @ToString class Phone { private String brand; private String description; }

3、執行結果

<student> <name>張三</name> <phone> <brand>小米手機</brand> <description>小米手機的描述</description> </phone> <phone> <brand>蘋果手機</brand> <description>蘋果手機的描述</description> </phone> </student>

可以看到<phones>被隱藏了

七、XStream屬性混疊

1、屬性混疊用於創建一個成員變量作為XML屬性序列化。讓我們再次修改原來的XStreamTest02例子,將下面的代碼添加到XStreamTest02例子裏面

xStream.useAttributeFor(Student.class, "studentName");

2、執行代碼

※超省錢租車方案

商務出差、學生出遊、旅遊渡假、臨時用車!GO 神州租賃有限公司!合法經營、合法連鎖、合法租賃小客車!

package io.github.xstream.test02; ​ import com.thoughtworks.xstream.XStream; import lombok.AllArgsConstructor; import lombok.ToString; ​ import java.util.ArrayList; import java.util.List; ​ public class XStreamTest02 { public static void main(String[] args) { List<Phone> phones = new ArrayList<>(); phones.add(new Phone("小米手機", "小米手機的描述")); phones.add(new Phone("蘋果手機", "蘋果手機的描述")); Student student = new Student("張三", phones); ​ XStream xStream = new XStream();//需要XPP3庫 xStream.alias("student", Student.class); xStream.alias("phone", Phone.class); xStream.aliasField("name", Student.class, "studentName"); xStream.addImplicitCollection(Student.class, "phones"); xStream.useAttributeFor(Student.class, "studentName"); ​ //XML序列化 String xml = xStream.toXML(student); System.out.println(xml); } } ​ @AllArgsConstructor @ToString class Student { private String studentName; private List<Phone> phones; } ​ @AllArgsConstructor @ToString class Phone { private String brand; private String description; }

3、執行結果

<student name="張三"> <phone> <brand>小米手機</brand> <description>小米手機的描述</description> </phone> <phone> <brand>蘋果手機</brand> <description>蘋果手機的描述</description> </phone> </student>

可以看到<name>被作為了<student>的屬性

八、XStream包混疊

1、包混疊用於創建一個類XML的完全限定名稱的別名到一個新的限定名稱。讓我們再次修改原來的XStreamTest02例子,將下面代碼

xStream.alias("student", Student.class); xStream.alias("phone", Phone.class);

修改為

xStream.aliasPackage("xx.xx.xx.xx", "io.github.xstream.test02");

2、執行代碼

package io.github.xstream.test02; ​ import com.thoughtworks.xstream.XStream; import lombok.AllArgsConstructor; import lombok.ToString; ​ import java.util.ArrayList; import java.util.List; ​ public class XStreamTest02 { public static void main(String[] args) { List<Phone> phones = new ArrayList<>(); phones.add(new Phone("小米手機", "小米手機的描述")); phones.add(new Phone("蘋果手機", "蘋果手機的描述")); Student student = new Student("張三", phones); ​ XStream xStream = new XStream();//需要XPP3庫 // xStream.alias("student", Student.class); // xStream.alias("phone", Phone.class); xStream.aliasPackage("xx.xx.xx.xx", "io.github.xstream.test02"); xStream.aliasField("name", Student.class, "studentName"); xStream.addImplicitCollection(Student.class, "phones"); xStream.useAttributeFor(Student.class, "studentName"); ​ //XML序列化 String xml = xStream.toXML(student); System.out.println(xml); } } ​ @AllArgsConstructor @ToString class Student { private String studentName; private List<Phone> phones; } ​ @AllArgsConstructor @ToString class Phone { private String brand; private String description; }

3、執行結果

<xx.xx.xx.xx.Student name="張三"> <xx.xx.xx.xx.Phone> <brand>小米手機</brand> <description>小米手機的描述</description> </xx.xx.xx.xx.Phone> <xx.xx.xx.xx.Phone> <brand>蘋果手機</brand> <description>蘋果手機的描述</description> </xx.xx.xx.xx.Phone> </xx.xx.xx.xx.Student>

可以看到包名由io.github.xstream.test02替換為了xx.xx.xx.xx

九、XStream註解

1、前面的四、五、六、七、八步驟都是通過代碼操作的

//xStream.alias("student", Student.class);
//xStream.alias("phone", Phone.class);
xStream.aliasPackage("xx.xx.xx.xx", "io.github.xstream.test02");
xStream.aliasField("name", Student.class, "studentName");
xStream.addImplicitCollection(Student.class, "phones");
xStream.useAttributeFor(Student.class, "studentName");

2、XStream同時也支持註解,使用註解會變得簡單也會達到相同的效果

package io.github.xstream.test03; ​ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.*; import com.thoughtworks.xstream.converters.basic.BooleanConverter; import lombok.AllArgsConstructor; import lombok.Data; import lombok.ToString; ​ import java.util.ArrayList; import java.util.List; ​ public class XStreamTest03 { public static void main(String[] args) { List<Phone> phones = new ArrayList<>(); phones.add(new Phone("小米手機", "小米手機的描述")); phones.add(new Phone("蘋果手機", "蘋果手機的描述")); Student student = new Student("張三", phones, 20, true); XStream xStream = new XStream();//需要XPP3庫 //xStream.processAnnotations(new Class[]{Student.class}); xStream.autodetectAnnotations(true); //XML序列化 String xml = xStream.toXML(student); System.out.println(xml); } } ​ @AllArgsConstructor @ToString //別名註解 @XStreamAlias("student") class Student { @XStreamAlias("name") //把字段節點設置成屬性 @XStreamAsAttribute private String studentName; //省略集合根節點 @XStreamImplicit private List<Phone> phones; //隱藏字段 @XStreamOmitField private int age; //設置轉換器 @XStreamConverter(value = BooleanConverter.class, booleans = {false}, strings = {"男", "女"}) private boolean sex; } ​ @AllArgsConstructor @ToString @XStreamAlias("phone") class Phone { private String brand; private String description; }

3、使用註解的話,需要XML序列化之前添加如下代碼

xStream.autodetectAnnotations(true);

或者

xStream.processAnnotations(new Class[]{Student.class});

4、執行結果

<student name="張三"> <phone> <brand>小米手機</brand> <description>小米手機的描述</description> </phone> <phone> <brand>蘋果手機</brand> <description>蘋果手機的描述</description> </phone> <sex>男</sex> </student>

使用註解我們也可以看到也能達到相同的效果

注意:當使用XStream對象處理一個被註解的類型時,XStream對象也會處理所有與其相關的類型的註解信息,即該類型的父類、父接口、所有子類的註解。

十、XStream自定義轉換器

1、XStream自帶的轉換器

    XStream內部有許多轉換器,用於JavaBean對象到XML或JSON之間的轉換。這些轉換器的詳細信息網址:http://x-stream.github.io/converters.html

2、使用自定義轉換器

package io.github.xstream.test04; ​ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import lombok.ToString; ​ public class XStreamTest04 { public static void main(String[] args) { Student student =new Student("張三",19); XStream xStream = new XStream(); //註冊轉換器 xStream.registerConverter(new StudentConverter()); //序列化 String xml = xStream.toXML(student); System.out.println(xml); //反序列化 student=(Student)xStream.fromXML(xml); System.out.println(student); } } ​ @Getter @Setter @ToString @AllArgsConstructor class Student { private String name; private int age; }

自定義轉換器

package io.github.xstream.test04; ​ import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; ​ public class StudentConverter implements Converter { //定義轉換器能轉換的JavaBean類型 @Override public boolean canConvert(Class type) { return type.equals(Student.class); } ​ //把對象序列化成XML或JSON @Override public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { Student student = (Student) value; writer.startNode("姓名"); writer.setValue(student.getName()); writer.endNode(); writer.startNode("年齡"); writer.setValue(student.getAge() + ""); writer.endNode(); writer.startNode("轉換器"); writer.setValue("自定義的轉換器"); writer.endNode(); } ​ //把XML或JSON反序列化成對象 @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { Student student = new Student("", -1); reader.moveDown(); student.setName(reader.getValue()); reader.moveUp(); reader.moveDown(); student.setAge(Integer.parseInt(reader.getValue())); reader.moveUp(); return student; } }

3、執行結果

<student>
  <姓名>張三</姓名>
  <年齡>19</年齡>
  <轉換器>自定義的轉換器</轉換器>
</student>
Security framework of XStream not initialized, XStream is probably vulnerable.
Student(name=張三, age=19)

4、常用的轉換器接口與抽象類

SingleValueConverter:單值轉換接口
AbstractSingleValueConverter:單值轉換抽象類
Converter:常規轉換器接口

十一、XStream對象流

1、對象輸出流

package io.github.xstream.test05; ​ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.ToString; ​ import java.io.*; ​ public class XStreamTest05 { public static void main(String[] args) throws IOException, ClassNotFoundException { XStreamTest05 xStreamTest04 = new XStreamTest05(); String path = "F:\\test.txt"; XStream xStream = new XStream();//需要XPP3庫 xStream.processAnnotations(Student.class); xStream.autodetectAnnotations(true); xStreamTest04.writeObject(xStream, path); } ​ //對象輸出流方法 public void writeObject(XStream xStream, String path) throws IOException { Student zs = new Student("張三", 20); Student ls = new Student("李四", 21); Student ww = new Student("王五", 22); ObjectOutputStream objectOutputStream = xStream.createObjectOutputStream(new FileOutputStream(path)); objectOutputStream.writeObject(zs); objectOutputStream.writeObject(ls); objectOutputStream.writeObject(ww); objectOutputStream.writeObject("totalStudent"); objectOutputStream.writeInt(3); objectOutputStream.close(); } } ​ @AllArgsConstructor @ToString //別名註解 @XStreamAlias("student") class Student { @XStreamAlias("name") //把字段節點設置成屬性 @XStreamAsAttribute private String studentName; private int age; }

2、在指定路徑中打開test.txt文件,查看執行結果

<object-stream> <student name="張三"> <age>20</age> </student> <student name="李四"> <age>21</age> </student> <student name="王五"> <age>22</age> </student> <string>totalStudent</string> <int>3</int> </object-stream>

注意:XStream對象流是通過標準java.io.ObjectOutputStream和java.io.ObjectInputStream對象。因為XML文檔只能有一個根節點,必須包裝在一個序列化的所有元素額外的根節點。這個根節點默認為<object-stream>上面的例子所示。 

3、對象輸入流

package io.github.xstream.test05; ​ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.ToString; ​ import java.io.*; ​ public class XStreamTest05 { public static void main(String[] args) throws IOException, ClassNotFoundException { XStreamTest05 xStreamTest04 = new XStreamTest05(); String path = "F:\\test.txt"; XStream xStream = new XStream();//需要XPP3庫 xStream.processAnnotations(Student.class); xStream.autodetectAnnotations(true); xStreamTest04.readObject(xStream, path); } ​ //對象輸入流方法 public void readObject(XStream xStream, String path) throws IOException, ClassNotFoundException { ObjectInputStream objectInputStream = xStream.createObjectInputStream(new FileInputStream(path)); System.out.println((Student) objectInputStream.readObject()); System.out.println((Student) objectInputStream.readObject()); System.out.println((Student) objectInputStream.readObject()); System.out.println(objectInputStream.readObject()); System.out.println(objectInputStream.readInt()); } } ​ @AllArgsConstructor @ToString //別名註解 @XStreamAlias("student") class Student { @XStreamAlias("name") //把字段節點設置成屬性 @XStreamAsAttribute private String studentName; private int age; }

4、執行結果

Student(studentName=張三, age=20)
Student(studentName=李四, age=21)
Student(studentName=王五, age=22)
totalStudent
3

十二、XStream持久化API

1、保存Java對象

package io.github.xstream.test06; ​ import com.thoughtworks.xstream.persistence.FilePersistenceStrategy; import com.thoughtworks.xstream.persistence.PersistenceStrategy; import com.thoughtworks.xstream.persistence.XmlArrayList; import lombok.AllArgsConstructor; import lombok.ToString; ​ import java.io.File; import java.util.List; ​ public class XStreamTest06 { public static void main(String[] args) { XStreamTest06 xStreamTest06=new XStreamTest06(); xStreamTest06.saveObject(); } ​ //保存Java對象 public void saveObject(){ PersistenceStrategy strategy = new FilePersistenceStrategy(new File("F:\\")); List list = new XmlArrayList(strategy); list.add(new Student("張三",13)); list.add(new Student("李四",21)); list.add(new Student("王五",17)); } } ​ @ToString @AllArgsConstructor class Student { private String name; private int age; }

2、運行程序結果,在F磁盤的根路徑可以看到有三個文件:int@0.xml、int@1.xml、int@2.xml,每個對象都被序列化到XML文件里

3、讀取並刪除JavaBean對象

package io.github.xstream.test06; ​ import com.thoughtworks.xstream.persistence.FilePersistenceStrategy; import com.thoughtworks.xstream.persistence.PersistenceStrategy; import com.thoughtworks.xstream.persistence.XmlArrayList; import lombok.AllArgsConstructor; import lombok.ToString; ​ import java.io.File; import java.util.Iterator; import java.util.List; ​ public class XStreamTest06 { public static void main(String[] args) { XStreamTest06 xStreamTest06 = new XStreamTest06(); xStreamTest06.deleteObject(); } //讀取並刪除Java對象 public void deleteObject() { PersistenceStrategy strategy = new FilePersistenceStrategy(new File("F:\\")); List list = new XmlArrayList(strategy); for (Iterator it = list.iterator(); it.hasNext(); ) { System.out.println((Student) it.next()); //刪除對象序列化文件 it.remove(); } } } ​ @ToString @AllArgsConstructor class Student { private String name; private int age; }

4、運行程序結果,可以看到把F磁盤的根路徑int@0.xml、int@1.xml、int@2.xml文件刪除了

Security framework of XStream not initialized, XStream is probably vulnerable.
Student(name=張三, age=13)
Student(name=李四, age=21)
Student(name=王五, age=17)

十三、XStream操作JSON

1、XStream序列化JSON的重命名

package io.github.xstream.test07; ​ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; import io.github.xstream.test04.StudentConverter; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import lombok.ToString; ​ public class XStreamTest07 { public static void main(String[] args) { XStreamTest07 xStreamTest07 = new XStreamTest07(); xStreamTest07.serializeJson(); } ​ public void serializeJson() { Student student = new Student("張三", 19); XStream xStream = new XStream(new JettisonMappedXmlDriver());//設置Json解析器 xStream.autodetectAnnotations(true); //JSON序列化 String xml = xStream.toXML(student); System.out.println(xml); //JSON反序列化 student = (Student) xStream.fromXML(xml); System.out.println(student); } } ​ @ToString @AllArgsConstructor @XStreamAlias("人") class Student { @XStreamAlias("姓名") private String name; @XStreamAlias("年齡") private int age; }

2、運行結果

{"人":{"姓名":"張三","年齡":19}}
Student(name=張三, age=19)
Security framework of XStream not initialized, XStream is probably vulnerable.

注意:XStream序列化JSON的重命名的方式與其序列化成XML的方式一樣!

3、去掉序列化JSON的根節點

package io.github.xstream.test07; ​ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver; import com.thoughtworks.xstream.io.json.JsonWriter; import io.github.xstream.test04.StudentConverter; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import lombok.ToString; ​ import java.io.Writer; ​ public class XStreamTest07 { public static void main(String[] args) { XStreamTest07 xStreamTest07 = new XStreamTest07(); xStreamTest07.removeRootNode(); } ​ public void removeRootNode() { Student student = new Student("張三", 19); XStream xStream = new XStream(new JsonHierarchicalStreamDriver() { public HierarchicalStreamWriter createWriter(Writer writer) { return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE); } }); //Json序列化 String xml = xStream.toXML(student); System.out.println(xml); } } ​ @ToString @AllArgsConstructor @XStreamAlias("人") class Student { @XStreamAlias("姓名") private String name; @XStreamAlias("年齡") private int age; }

4、運行結果

{
  "name": "張三", "age": 19 }

注意:去掉根節點后的JSON串是不能反序列化的,因為XStream不知道它的類型。

5、JSON的解析器區別

前面兩個例子使用了不同的JSON解析器,這裏說明他們的不同之處:

  1. JettisonMappedXmlDriver:是支持序列化和反序列化Json的。

  2. JsonHierarchicalStreamDriver:只支持序列化,不支持反序列化。

 

參考:

    http://x-stream.github.io

    https://www.yiibai.com/xstream

    https://www.cnblogs.com/LiZhiW/p/4313493.html

● 別在 Java 代碼里亂打日誌了,這才是正確的打日誌姿勢!

● 高可用Redis服務架構分析與搭建

● 8 種方案,幫你解決重複提交問題!請拿走

● IDEA 解決 Maven 依賴衝突的高能神器,這一篇夠不夠?

● 你連微服務的網關都說不清楚,還天天鼓搗着要把項目拆分微服務?

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

有別於一般網頁架設公司,除了模組化的架站軟體,我們的營業主軸還包含:資料庫程式開發、網站建置、網頁設計、電子商務專案開發、系統整合、APP設計建置、專業網路行銷。

1.3T動力強?比速新SUV/MPV預售價僅6.19-8.6萬_租車

※超省錢租車方案

商務出差、學生出遊、旅遊渡假、臨時用車!GO 神州租賃有限公司!合法經營、合法連鎖、合法租賃小客車!

總結:外觀上也算是比較高顏值,原創度方面值得表揚,豐富的配置和良好的空間表現,綜合實力還是比較強的,未來的路充滿挑戰啊。比速M3預售價:6。19-8。39萬比速M3主要針對的是嚮往舒適安逸生活的家庭消費群體而打造的,外觀上更有精緻感,車身線條簡潔舒暢,誇張的X造型中網採用大面積鍍鉻裝飾,給人很霸氣的感覺,辨識度很高,B、C、D柱也是採用黑色設計,懸浮車頂非常時尚。

比速T3

預售價:7.49-8.69萬元

比速T3的整體外觀設計走的是時尚風格,進氣格柵與大燈採用整體式設計,視覺效果出色,再加上鍍鉻飾條的點綴與中央“BISU”車標巧妙的融合,營造了飛翼式的造型特點,黑色運動包圍與車頂行李架很有SUV的范。

而側面A柱、B柱和C柱都採用了黑色的設計,營造出懸浮式車頂的炫酷效果,雙五輻式輪圈,硬朗的尾燈線條,雙邊雙出的排氣管,運動感十足。

內飾部分依然透露着很潮流的氣息,黑棕雙色搭配的內飾很顯檔次,多處採用銀色飾條飾板,凸顯年輕的風格,懸浮式的中控屏設計是一大亮點,據說,比速T3還全系標配車身穩定系統、四輪碟剎、倒車雷達、中控大屏、倒車影像等使用功能。

比速T3的長寬高分別為4350/1825/1685mm,軸距為2565mm,與哈弗H2、瑞風S3等競爭對手相比稍微佔優,雙縫線皮質座椅質感出色,前後排空間表現還算良好,

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

有別於一般網頁架設公司,除了模組化的架站軟體,我們的營業主軸還包含:資料庫程式開發、網站建置、網頁設計、電子商務專案開發、系統整合、APP設計建置、專業網路行銷。

儲物格空間比較實用。

動力方面,比速T3全系標配1.3T發動機,最大功率133馬力,與之匹配的5擋手動變速器,相信不會讓我們失望。

總結:外觀上也算是比較高顏值,原創度方面值得表揚,豐富的配置和良好的空間表現,綜合實力還是比較強的,未來的路充滿挑戰啊。

比速M3

預售價:6.19-8.39萬

比速M3主要針對的是嚮往舒適安逸生活的家庭消費群體而打造的,外觀上更有精緻感,車身線條簡潔舒暢,誇張的X造型中網採用大面積鍍鉻裝飾,給人很霸氣的感覺,辨識度很高,B、C、D柱也是採用黑色設計,懸浮車頂非常時尚。

內飾整體造型設計還是挺跟得上潮流的,仿木飾板的加入提升了不少豪華感,雖說這個價位來說塑料面板在所難免,但是邊緣仿縫線的設計增添了很多精緻感,頂配車型一塊10英寸的中控屏是一大亮點,支持手機互聯、導航等主流功能。

其長*寬*高為4760*1810*1751mm,軸距達到2800mm,和寶駿730等競品相比很有優勢,門板還有擋把兩側都包裹了皮革、絨布等軟性材質,觸感很好,即使是第三排空間也很舒適。

在動力系統部分,將提供了1.5L自然吸氣發動機,最大功率114馬力,後期還會有1.5T渦輪增壓發動機和CVT變速器,而傳動部分,將搭載5擋手動變速器。

總結:在高手如雲的自主品牌MpV市場里,會與有寶駿730、風行S500等車型廝殺,相信在車內空間、配置方面有優勢的比速M3會得到用戶的肯定。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

日本、大陸,發現這些先進的國家已經早就讓電動車優先上路,而且先進國家空氣品質相當好,電動車節能減碳可以減少空污

CR-V、RAV4要哭?全新美繫緊湊型SUV酷似大切諾基!_租車

※超省錢租車方案

商務出差、學生出遊、旅遊渡假、臨時用車!GO 神州租賃有限公司!合法經營、合法連鎖、合法租賃小客車!

4T有所不同,指南者所搭載的1。4T發動機最大馬力達到165匹,而自由俠的1。4T馬力值為150匹,相信未來正式上市以後動力表現還是值得期待。此外作為配置分級,不出意外的話全新指南者還將會搭載一台與現款自由光一樣的2。4L自然吸氣發動機,最大馬力值175匹。

Jeep在華國產以後,先後推出了自由光和自由俠兩款SUV車型,但自由光作為中型SUV售價偏高,自由俠作為小型SUV尺寸偏小,使得很大一部分意向車型在緊湊型SUV的潛在買家有些感到捉急..不過不需要糾結,廣汽菲克第三款SUV——指南者,將在不久后發布,並有望在年內正式上市。

指南者的名聲來頭並不小,作為Jeep品牌全系尚以進口方式在國內進行銷售之時,指南者可以說是Jeep品牌銷量非常高的車型,車身緊湊,外觀也是足夠的霸氣,

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

日本、大陸,發現這些先進的國家已經早就讓電動車優先上路,而且先進國家空氣品質相當好,電動車節能減碳可以減少空污

而且進口指南者最低售價僅在20萬出頭,這也讓很大一部分車主有了購買進口車型的理由。

(圖為現款在售2014款指南者)

全新指南者的外觀依舊向自家旗艦大切諾基看齊,標誌性的7孔豎狀進氣格柵彰顯的是Jeep家族的血統,整體性極強的前臉設計風格讓指南者的車頭看上去更寬,視覺效果也更加威武霸氣。

全新指南者的內飾與自由光的相似程度比較高,從官圖上看用深淺配色的撞色設計的確有助於提高視覺衝擊力,至於實車的內飾表現如何,還需要在正式上市以後看到實車再進行評判。

動力總成方面,全新指南者搭載了號稱Jeep史上最強的小排量渦輪增壓發動機1.4T FIRE Multi-Air2,與自由俠身上那台1.4T有所不同,指南者所搭載的1.4T發動機最大馬力達到165匹,而自由俠的1.4T馬力值為150匹,相信未來正式上市以後動力表現還是值得期待。

此外作為配置分級,不出意外的話全新指南者還將會搭載一台與現款自由光一樣的2.4L自然吸氣發動機,最大馬力值175匹。

市場分析:Jeep指南者作為進口車型在華銷售的價格並不高(22.19-28.09萬),進行國產後售價有望進一步壓低,屆時可能會成為合資緊湊型SUV市場中的有力競爭选手。據悉Jeep指南者將在11月16日正式發布,至於具體的配置,我們也將在新車上市後進行詳細分析。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

有別於一般網頁架設公司,除了模組化的架站軟體,我們的營業主軸還包含:資料庫程式開發、網站建置、網頁設計、電子商務專案開發、系統整合、APP設計建置、專業網路行銷。

Apple Watch 幫助國外一位男子發現自己有七個血塊,還好有即時治療

一直以來 Apple Watch 不時就會傳出救人一命的新聞,像我們曾報導過的大學生車禍受困車內、發現有敗血症等等,而最近又有國外一名男子,因為 Apple Watch 的心跳速度警示而送醫檢查,結果發現到自己有 7 個血塊,連醫生都說還好他有即時就醫,要不然後果真的不堪設想。

Apple Watch 幫助國外一位男子發現自己有七個血塊

根據外媒 wrdw 的報導,一名熱愛攝影的 43 歲 Keith Simpson 有著美滿家庭,一個妻子與兩個十幾歲的小孩,他表示使用 Apple Watch 最主要是希望變得更健康,因為它會鼓勵我出外走走,不僅能鍛鍊身體,還可以拍喜歡的照片。

不過在去年 11 月的某一天,他感到身體有一點不適,當他轉向妻子時,完全不用說話,她就能知道我的臉變紅,隨後低頭看 Apple Watch,發現到自己的心跳速度低於正常水平,跳動的非常慢,因此就趕快使用家裡的血壓計與打電話給醫生求助,醫生建議立即尋求醫療救助。

Keith Simpson 也說到:「到醫院給醫生檢查之後,他們發現到我有 7 個血塊,不是 1 個,經過一番治療之後,終於把這些血塊清除,醫生也說如果沒有趕緊就醫,那狀況可能會跟現在完全不同」。

為此 Keith Simpson 甚至還發送感謝電子郵件給 Tim Cook,並分享 Apple Watch 是如何挽救他的生命:

這次幫助 Keith Simpson 的心跳速度警示其實很多智慧型穿戴裝置都能做到,雖然不是醫療器材,但在這種緊急時刻,還是能提供一點幫助、線索。

今年預計登場的新款 Apple Watch Series 7,目前也有一些傳聞,有可能會加入血糖監測或血壓監測。

資料來源:wrdw

Apple Watch Series 6 開箱使用體驗:為全家人而來的新世代智慧錶

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※回頭車貨運收費標準

iPhone 12 Pro Max 對決三星 Galaxy S21 Ultra 跌落測試,究竟誰更耐摔?

去年在三星 Galaxy Note20 系列推出後,當時 YouTube 頻道 PhoneBuff 以 Galaxy Note20 Ultra 和 iPhone 12 Pro Max 同時進行跌落測試,最終由 iPhone 12 Pro Max 勝出。在今年三星上半年度新旗艦 Galaxy S21 Ultra 推出後,不免俗還是要再次與 iPhone 比較一下跌落測試的耐用度。究竟在經過一連串嚴峻的測試後, Galaxy S21 Ultra 是否能為三星扳回一場勝利呢?

iPhone 12 Pro Max 對決三星 Galaxy S21 Ultra 跌落測試,究竟誰更耐摔?

之前 Phone Buff 進行過許多手機包括效能、續航、耐摔等 PK 測試項目,去年底採用超瓷晶盾面板保護的 iPhone 12 Pro Max 也在和 Galaxy Note20 Ultra 的跌落測試勝出,隨著 Galaxy S21 系列推出後,還是要來看看新推出的 Galaxy S21 Ultra 在耐摔測試方面是否有所進步。

開始測試前比較一下兩款手機的螢幕、材質與機身重量, iPhone 12 Pro Max 具有精緻的平整邊緣設計,採用精美的醫療級不鏽鋼邊框,搭配精密研磨的霧面玻璃機背。 6.7 吋的螢幕並採用全新的超瓷晶盾面板,帶來 4 倍耐摔的優異表現,iPhone 的耐用度獲得歷來最大幅度的提升。
至於全新推出的 Galaxy S21 Ultra 在機身設計雖然和 Galaxy Note20 Ultra 有些不同、螢幕尺寸也些微縮小至 6.8 吋,不過在機身雙面皆延續採用康寧 Gorilla Glass Victus 保護、搭配鋁合金材質邊框, Galaxy S21 Ultra 在機身重量相較 Galaxy Note20 Ultra 增加 21 克,也讓它比 iPhone 12 Pro Max 多了 1 公克。

首先第一回合,採用機身背面朝下進行跌落測試:

兩款手機在靠近機身背面的中框位置略有磨損,雖然 iPhone 12 Pro Max 沒有其餘的傷痕,不過在 Galaxy S21 Ultra 背面出現了一條裂痕,因此第一回合由 iPhone 12 Pro Max 勝出:

第二回合進行邊角的跌落測試:

Phone Buff 歷年在進行這項目的測試,都採用長尾夾固定手機:

iPhone 12 Pro Max 不鏽鋼邊框的傷痕不明顯,只在一些光影照射下能看到傷痕。至於鋁合金邊框的 Galxay S21 Ultra 傷痕略為明顯:

但這回合測試卻發生意外插曲, Galaxy S21 Ultra 機身背面因為長尾夾多了一道裂痕,這是過去在跌落測試未曾發生過的情形,因此這一輪仍由 iPhone 12 Pro Max 以些微差距勝出:

第三回合則輪到螢幕正面跌落測試:

之前在 Galaxy Note20 Ultra 進行這項測試時並未留下傷痕,不過這次在 Galaxy S21 Ultra 則是在螢幕邊角處呈現破裂、螢幕上也出現許多明顯裂痕,至於 iPhone 12 Pro Max 這次依然是穩穩地通過考驗:

進行三回合的測試後,接著是第一場加碼賽讓手機以更高的位置連續 10 次的跌落測試:

經過連續 10 次的跌落後, Galaxy S21 Ultra 雖然螢幕已經有裂痕,不過在相機功能、觸控、螢幕顯示都功能正常:

從另一個視角可見到 Galaxy S21 Ultra 在螢幕邊緣有明顯破裂的傷痕:

在看完 Galaxy S21 Ultra 後,接著輪到 iPhone 12 Pro Max 的加碼賽測試,不過畢竟上一回與 Galaxy Note20 Ultra 對決就已經通過考驗,這次的加碼賽改為更堅硬粗糙的材質作為跌落測試的表面:

iPhone 12 Pro Max 依然在加碼賽勝出:

完整測試影片

圖片/消息來源:PhoneBuff (YouTube)

延伸閱讀:
Apple Watch 發票載具條碼設定教學,一鍵快速喚醒載具條碼超方便!

LINE 應用小技巧: 10 個實用的 LINE 帳號整理術

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

【其他文章推薦】

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

※產品缺大量曝光嗎?你需要的是一流包裝設計!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

OPPO 第二代 AirVOOC 無線充電器已獲得 IMDA 認證,充電速度或將得到提升

在去年,OPPO 推出了無線充電器 AirVOOC,當時以其可支援超越大多數無線充電器的 40W 快速充電而引起話題,現在據國外媒體報導,第二代 AirVOOC 已經通過 IMDA 認證,看來離正式問世的距離似乎不遠,無線充電的速度的未來進展似乎也更值得期待。

OPPO 第二代 AirVOOC 無線充電器已獲得 IMDA 認證,充電速度或將得到提升

AirVOOC 是 OPPO 首款無線充電解決方案,據稱只需 56 分鐘就能為電池容量 4000mAh 的設備充滿電,只需充電 5 分鐘,就能提供用戶 1 小時的待機時間。 這款無線充電裝置配備了風冷技術,可以實現更好的散熱效果,並具備 Qi 無線充電標準,使其可相容多種支援無線充電的手機和耳機;配備自家研發的高壓隔離充電泵,號稱可以阻斷潛在的直流電路,讓可能對電池有害的電壓和電流無法到達電芯。

根據國外媒體 91Mobiles 的報導,OPPO 似乎正在開發一款新的無線充電器,從新加坡 IMDA (資通訊媒體發展管理局)的認證網站上,出現了一款型號為「OAWV02」的無線充電器產品通過認證,有鑑於去年推出的 AirVOOC 無線充電器型號為 OAWV01,這個新型號將能視為 AirVOOC 的第二代產品。很遺憾的是,在這個網站中僅有透露其型號,其他有用的訊息一概沒有,不過在去年 7 月,OPPO 還發表了 65W AirVOOC 技術,在當時刷新了整個無線充電功率的紀錄,可實現 30 分鐘即充飽一部 4000mAh 電池容量裝置的電力,打破傳統對於無線充電就是慢的成見,或許這款當時讓人相當眼饞的新技術將會在新一代產品上看到。

OPPO 在充電技術方面用功程度不輸相機技術,因此我們可以推測新款無線充電器將能帶來更快的充電速度,設計上相信也能吸取第一代的經驗而有所改良,相信不久之後更多相關資訊就會漸漸明朗。

◎資料來源:91Mobiles

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

【其他文章推薦】

※教你寫出一流的銷售文案?

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※推薦台中搬家公司優質服務,可到府估價

動人的法朵之聲

漫步在碎石子路面,飄來幽幽的葡萄酒香。在狹窄的街巷中穿行,夜晚的里斯本老城區,不時傳出哀婉感懷的法朵之聲。法朵博物館里,忽明忽暗的燭光下,法朵歌手身着黑裙,塗著紅指甲,披上珠翠裝飾的黑色大披肩,伴隨葡萄牙吉他的哀婉曲調,渾然忘我地吟唱着:“里斯本出了太陽,聞起來卻像月光的味道,當黎明隱隱約約地顯現時,第一輛有軌電車駛出了街巷……”

如果沒有現場聽過法朵歌手渾然忘我吟唱,就不算真正接觸過葡萄牙文化。法朵,是葡萄牙特色音樂,至今已有近兩百年歷史。“法朵”一詞,取義於拉丁文的“命運”,其曲意往往表達了葡萄牙人的宿命觀。它的起源頗為神秘,有人說是大航海時代水手帶來的,也有傳說是老街坊里傳唱的。可以確定的是,19世紀中恭弘=叶 恭弘,法朵風靡里斯本最窮苦的港口地區,在繁重的生活壓力下,它成了水手、小販等普通百姓苦中作樂的情感宣洩。

最動人的法朵之聲並非來自空靈、優雅的嗓音,而是帶着沙啞與憂傷,因為這樣才能從中聽出歲月的痕迹。吉他手裡卡多這樣說:“一個人的嗓音可以不那麼好聽,但卻可以成為一位很好的法朵歌手,因為法朵來自心靈。”唱到動情洒脫之時,法朵歌手拿起客人的紅酒一飲而盡,引得台下會唱的人都全情投入,一齊歌唱。

即便不懂歌詞,聽眾也能感受到法朵表達的情緒。那是一種細膩的愁緒與思念,可以是對逝去時光的感嘆、對分開愛人的思念或是對未曾經歷過的事憑空生出的感慨。在法朵皇后瑪麗亞看來,葡萄牙人發明法朵是非常自然的。歷史與地理位置將葡萄牙置於歐洲大陸最西端,沒有人會平白無故來這麼遠的地方,葡萄牙有的是大海,所以葡萄牙人就去航海;而大海是可怕的、未知的、危險的,人們就要等待、忍耐和哀嘆。法朵就表達了無限的哀嘆。

“陸止於此,海始於斯”。歷史的疾風從海角懸岩和荒山緩坡上吹過,這裡是大航海時代的起點,無數雄心壯志的航海家從這裏出發。戲劇《法朵的歷史》還原了大航海時代的場景:每到黃昏時分,婦女們三三兩兩地披着黑色披肩,望着大海的來處,口裡低聲唱着:“你又揚帆去遠航,何時才歸?我天天眼望大海,期盼你早回……”海風吹過,歌聲入耳,令人潸然淚下。

那種愁緒來自葡萄牙人的本性,以航海聞名世界的國度,無數人背井離鄉、漂洋過海,漂泊的生活讓他們的性格中充滿了對未來的不確定。日常生活中,如果你跟葡萄牙人打招呼:“你好嗎?”,得到的回答大多是平平淡淡的“還行吧”。法朵正是葡萄牙普通老百姓對日常生活的表達。它不是貴族的特權,而是大眾的詩歌。

現代法朵歌手瑪麗莎出生於莫桑比克,孩提時舉家前往葡萄牙,在里斯本老區阿爾法瑪接觸到傳統法朵。回憶那段日子,她曾說:“那時,我還不識字,為了幫助我記住那些歌詞,父親用畫畫的方法給我描述里斯本的街景、河水……這裏,有普通人對生活的情緒,將激情、歡欣、哀痛、嫉妒和諷刺透過詩歌一一表達出來,長大以後,我才理解它有多麼深刻。”

如果你來到這片土地,就能聽到,從你身邊路過的當地人會時不時哼唱耳熟能詳的法朵片段;還能看到,古老斑駁的牆壁上保留下的法朵塗鴉。稍稍低頭留意里斯本的地面,你會發現,一片片灰色和黑色的小磚石拼貼出海浪圖案的碎石子路面,溫柔地延伸向城市的大街小巷。這似乎在提示着每一位注意到它們的旅人:海浪依然翻滾,大航海的傳奇從未停止。

聆聽法朵的美麗與哀愁,遊人感受到一種穿越時空的魅力。

版式設計:蔡華偉

本站聲明:網站內容來http://www.societynews.cn/html/wh/fq/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

生態環境部部長黃潤秋視頻會見聯合國《生物多樣性公約》執行秘書

2021-01-26 來源:生態環境部

2021-01-26
來源:生態環境部 分享到:
[打印]
字號:[大] [中] [小]

  1月26日,生態環境部部長黃潤秋在京視頻會見聯合國《生物多樣性公約》執行秘書穆雷瑪女士。雙方就聯合國《生物多樣性公約》第十五次締約方大會(COP15)有關事宜進行了深入交流。

  黃潤秋表示,2020年,中國政府克服新冠肺炎疫情的不利影響,積极參与全球生物多樣性治理,表達了推動成功舉辦COP15的強烈政治意願。習近平主席在去年9月30日召開的聯合國生物多樣性峰會上發表重要講話,向世界發出聚首昆明,共商生物多樣性保護大計的誠摯邀請,親自推動國際社會共同努力舉辦一屆具有里程碑意義的大會。今年1月11日,國務院副總理韓正出席“一個星球”視頻峰會,提出攜手努力、抓緊行動,確保COP15取得积極成果,共啟全球生物多樣性治理新進程。

  黃潤秋指出,COP15將通過兼具務實和雄心的“2020年後全球生物多樣性框架”,這一預期成果具有里程碑意義。過去一年,中方與公約秘書處密切合作,努力克服困難,积極推進大會籌備,推進“沙姆沙伊赫到昆明”人與自然行動議程的實施,完成東道國協議磋商。特別是雲南省人民政府以極大熱情,為會議籌備做了大量工作,會務後勤保障工作進展順利。中方感謝秘書處對大會籌備採取防疫措施的理解,願就會期、會議方式、參會人員等方面的調整事宜同秘書處保持密切溝通。中方支持公約秘書處發揮組織力,加快成果案文的磋商。

  穆雷瑪女士對中國政府克服疫情影響籌備大會表示感謝,對中國在推進大會籌備、成果磋商方面付出的努力表示讚賞,願與中方一道努力做好大會籌備各項工作。

  外交部條法司、COP15執委辦有關負責同志參加了視頻會談。

【其他文章推薦】

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※超省錢租車方案

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

※推薦台中搬家公司優質服務,可到府估價

波札那數百頭大象離奇死亡 查明是藍綠藻毒素作祟

摘錄自2020年9月22日中央社報導

非洲國家波札那(Botswana)官員今(21日)說,波札那今年數百頭大象死亡讓環境保護人士感到困惑和震驚,最後發現是由水中細菌藍綠藻(cyanobacteria)產生的毒素引起。

路透社報導,波札那野生動物和國家公園部副主任陶洛(Cyril Taolo)在記者會說,死亡大象的數量已從7月的281頭上升到330頭。

野生動物和國家公園部首席獸醫魯賓(Mmadi Reuben)在記者會表示:「我們的最新檢測發現,藍綠藻神經毒素是造成(大象)死亡的原因。這些是在水中發現的細菌。」

他又說:「(大象)死亡是由藍綠藻造成中毒引起,藍綠藻在窪地或水坑中生長。」另外,大象的死亡「在2020年6月底已經停止,正是窪地枯乾的時候」。

由於盜獵,非洲大象整體數量正在下降,但是波札那大象數量已經增加到約13萬頭,是非洲大陸近1/3大象的家。

生物多樣性
國際新聞
波札那
大象
動物死亡
藍綠藻

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※回頭車貨運收費標準

墨西哥居民死守水壩 不讓政府輸水給美國

摘錄自2020年9月21日中央社報導

群眾今(20日)聚集在乾旱成災的墨西哥北部示威,試圖保住一座位於美墨邊界的水壩控制權。向來致力與美國總統川普維持良好關係的墨西哥總統羅培茲歐布拉多(Andres Manuel Lopez Obrador)18日表示,墨西哥必須善盡義務。

根據1944年的條約,墨西哥必須在5年內把175萬英畝呎(acre-feet)的水輸給美國,墨西哥也會拿到美國科羅拉多河(Colorado River)的水源。

美國德州州長艾波特(Greg Abbott)上週促請國務院協助落實協議。墨西哥還差近一年的水量才能達到條約要求,10月24日前,必須還完近1年量的水債。

但墨西哥民眾拒絕輸水給美國,群眾9月間在與美國新墨西哥州接壤的奇瓦瓦州(Chihuahua)波基亞水壩(La Boquilla dam)附近示威,奪得水壩控制權,但示威期間卻發生濺血事件,一個星期前,一名民眾在示威時遭砲火波及,死在墨西哥國民兵的子彈之下。

墨西哥國家水務委員會(National Water Commission of Mexico)發布的旱情監測顯示,奇瓦瓦州大片地區已有超過6個月出現中度和重度乾旱,鄰州索諾拉(Sonora)與科阿韋拉州(Coahuila)也受乾旱影響。

國際新聞
墨西哥
水壩
輸水
抗議

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

※產品缺大量曝光嗎?你需要的是一流包裝設計!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!