亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

java讀取apollo配置 java判斷文件夾是否存在該文件( 四 )


Student stu =new Student("vitamin",20,1);File destFile = new File("destFile.txt");// 序列化對(duì)象到文件中ObjectOutputStream oos= null;try { FileOutputStream fos = new FileOutputStream(destFile);oos =new ObjectOutputStream(fos);oos.writeObject(stu);}catch(IOException ex) {}finally { try {oos.close();}catch(IOException ex) {}}// 反序列化文件中的流為對(duì)象ObjectInputStream ois= null;try { FileInputStream fis = new FileInputStream(destFile); ois =new ObjectInputStream(fis); Student newStu = (Student)ois.readObject(); System.out.println(newStu.toString());}catch(Exception ex) {}finally { try {ois.close();}catch(IOException ex) {}}// Student 類(lèi)定義class Student implements Serializable{ private String Name; public int Age; public transient int Sex; public static String ClassName;private final static long serialVersionUID= -123123612836L;public Student(String name,int age,int sex) { this.Name =name; this.Age = age; this.Sex = sex; }@Override public String toString() { return String.format("Name=%s,Age=%d,Sex=%d", this.Name,this.Age,this.Sex); }}對(duì)象要想成功實(shí)現(xiàn)序列化和反序列化需要注意以下幾點(diǎn):
對(duì)象要想實(shí)現(xiàn)序列化 , 被序列化的對(duì)象要實(shí)現(xiàn)標(biāo)記接口 Serializable 。無(wú)論屬性訪(fǎng)問(wèn)權(quán)限如何 , 都可以進(jìn)行序列化和反序列化 , 但靜態(tài)屬性無(wú)法被序列化和反序列化 。如果在對(duì)象序列化的過(guò)程中 , 不想讓某個(gè)屬性參與其中 , 可以使用關(guān)鍵字 transient 進(jìn)行標(biāo)記 。序列化到文件后是不要進(jìn)行flush操作的 , 同字節(jié)流一樣也不存在緩沖區(qū) 。如果對(duì)象在序列化后 , 對(duì)對(duì)象的屬性的修改(比如訪(fǎng)問(wèn)屬性的變更 , 字段類(lèi)型的變更)都會(huì)導(dǎo)致在反序列后出現(xiàn)類(lèi)似錯(cuò)誤 :Student; local class incompatible: stream classdesc serialVersionUID = -123123612836, local class serialVersionUID = -1225000535040348600 這是由于對(duì)象在編譯成class文件過(guò)程中會(huì)對(duì)屬性生成一個(gè) serialVersionUID  , 這個(gè)屬性也會(huì)存儲(chǔ)到序列化后的對(duì)象中 , 每次屬性的變更都會(huì)導(dǎo)致它進(jìn)行修改 , 如果出現(xiàn)前后不一致 , 則導(dǎo)致出現(xiàn)以上錯(cuò)誤 。如果想避免這個(gè)問(wèn)題 , 需要在對(duì)象內(nèi)指定 serialVersionUID  , 具體數(shù)值什么都可以 。但是屬性的定義一定要是 final static long 。反序列化后的對(duì)象是Object類(lèi)型 , 不是Student 。如果需要使用Student對(duì)象的屬性或方法 , 需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)化 。對(duì)象在序列化和反序列化的過(guò)程中 , 拋出的不只有IOException 。如果刪除Student類(lèi)定義或是Student.class文件 , 然后對(duì)序列化后的流調(diào)用toString()方法 System.out.println(ois.readObject()); ,就會(huì)拋出異常: java.lang.ClassNotFoundException: Student , 如果反序列化后的對(duì)象轉(zhuǎn)為非Student對(duì)象 , 也會(huì)報(bào)其他的非IOException異常 。所以在處理異常的時(shí)候 , 需要考慮到這些情況 。Properties
在學(xué)習(xí)Java的過(guò)程中肯定會(huì)接觸到用Map結(jié)構(gòu)來(lái)存儲(chǔ)Key/Value關(guān)系的數(shù)據(jù) , 在我之前的博客 Java中關(guān)于泛型集合類(lèi)存儲(chǔ)的總結(jié) 中講到過(guò)它的一個(gè)實(shí)現(xiàn)類(lèi) HashMap 。但是除了HashMap外還有一個(gè)實(shí)現(xiàn)類(lèi)HashTable  , 它可以實(shí)現(xiàn)和HashMap一樣的功能 , 但是由于是線(xiàn)程安全的(同步的)并且存儲(chǔ)的對(duì)象是Object類(lèi)型 , 這就導(dǎo)致它的性能對(duì)于線(xiàn)程不安全(非同步)HashMap會(huì)有所降低 , 所以不是很常用 。但是HashTable有一個(gè)子類(lèi) Properties 卻很常用 , 它可以在文件中存儲(chǔ) Key=Value 形式的數(shù)據(jù) , 可以用其來(lái)讀取配置 。
Properties prop =new Properties();prop.setProperty("Name", "vitamin");prop.setProperty("Age", "20"); File file =new File("destFile.txt");FileWriter writer =new FileWriter(file);prop.store(writer, "this is a test conf"); // 存儲(chǔ)到文件中并設(shè)置備注 , 如果備注是中文則會(huì)被轉(zhuǎn)碼 FileReader reader =new FileReader(file);prop.load(reader);System.out.println(prop.getProperty("Name")); // vitaminSystem.out.println(prop.getProperty("Sex")); // nullSystem.out.println(prop.getProperty(" Name")); // nullProperties雖然繼承自HashTable , 但是它的Key和Value只能是String類(lèi)型 , 然而實(shí)現(xiàn)內(nèi)部仍然調(diào)用的是put(Object,Object)方法 。Properties是允許你直接調(diào)用put(Object,Object)方法的 , 畢竟都是Map的實(shí)現(xiàn)類(lèi) , 但是這樣調(diào)用了之后 , 在運(yùn)行時(shí)會(huì)報(bào)錯(cuò)并警告你只能設(shè)置String類(lèi)型的數(shù)據(jù) 。


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專(zhuān)業(yè)人士給予相關(guān)指導(dǎo)!

「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助: