亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java中的Io(input與output)操作總結(四)

2019-11-26 16:15:54
字體:
來源:轉載
供稿:網友
前面已經把java io的主要操作講完了
這一節我們來說說關于java io的其他內容

Serializable序列化
實例1:對象的序列化
復制代碼 代碼如下:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
@SuppressWarnings("serial")
//一個類要想實現序列化則必須實現Serializable接口
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "Name:" + this.name + ", Age:" + this.age;
}
}
public class Demo {
public static void main(String[] args) {
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
Person p1 = new Person("zhangsan",12);
Person p2 = new Person("lisi",14);
//此處創建文件寫入流的引用是要給ObjectOutputStream的構造函數玩兒
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(path);
oos = new ObjectOutputStream(fos);
//這里可以寫入對象,也可以寫入其他類型數據
oos.writeObject(p1);
oos.writeObject(p2);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

所謂對象序列化就是把一個對象進行持久化存儲,方便保留其屬性
通俗點說,等于把一個對象從堆內存里邊揪出來放到硬盤上
當然,如果你開心,你可以序列化其他東西,包括數組,基本數據類型等等
來看看內容,神馬玩意兒這是……

 
實例2:對象的反序列化

復制代碼 代碼如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class Demo {
public static void main(String[] args) {
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
//好吧,這里代碼寫得著實有點長了,還要拋異常什么的
//如果你也看的煩,那就在主方法上拋吧,構造方法里用匿名對象就好了
//什么?別告訴我你不知道匿名對象
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(path);
ois = new ObjectInputStream(fis);
//這里返回的其實是一個Object類對象
//因為我們已知它是個Person類對象
//所以,就地把它給向下轉型了
Person p = (Person)ois.readObject();
System.out.println(p);
//拋死你,煩煩煩~?。?!
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
//還是要記得關閉下流
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

你看,我們把一個對象存放在硬盤上是為了方便日后使用
現在用得著它了,自然得拿出來


管道流
實例3:線程的通信

復制代碼 代碼如下:

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
//實現Runnable接口,實現一個讀的線程
class Read implements Runnable {
private PipedInputStream in;
//將需要讀的管道流傳入到構造函數中
public Read(PipedInputStream in) {
this.in = in;
}
//實現讀這一線程
public void run() {
try {
byte[] buf = new byte[1024];
int temp = 0;
//循環讀取
//read是一個阻塞方法,需要拋異常
//此處把打印流的代碼也加入進來
//是因為如果沒有讀取到數據,那么打印的代碼也無效
while((temp = in.read(buf)) != -1) {
String str = new String(buf,0,temp);
System.out.println(str);
}
} catch (IOException e) {
//其實這里應拋出一個自定義異常的
//暫時我還沒弄清楚
e.printStackTrace();
} finally {
try {
//我已經拋火了,這只是為了提醒自己異常很重要
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//這里實現一個寫的類
class Write implements Runnable {
private PipedOutputStream out;
//將管道輸入流傳進來
public Write(PipedOutputStream out) {
this.out = out;
}
public void run() {
try {
//這里開始寫出數據
out.write("管道輸出".getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
//其實應該可以把這個關閉方法寫到上面那個try里邊
//但是這樣感覺怪怪的,邏輯不大對
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class Demo {
public static void main(String[] args) {
PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream();
try {
//連接管道
in.connect(out);
//創建對象,開啟線程
//此處同樣放進try...catch里面
//因為如果沒有鏈接管道,下面操作無意義
Read r = new Read(in);
Write w = new Write(out);
//把已經實現好run方法的對象放入線程中執行
new Thread(r).start();
new Thread(w).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}

好吧,廢了那么大勁兒,就打印了這么一句話,異常拋棄來很煩,為了注重細節……


管道流也許很難理解,其實非也
我們知道,字節流和字符流都需要數組來進行流的中轉
而管道流則直接串聯兩條流,一邊發送數據,一邊接收
然而,同時通信的的兩種狀態,如何才能確定發送和接收的一致性呢
那么,就需要用到線程,無論是接收方還是發送方先執行
總會造成一個線程的阻塞狀態,從而等待另一方的數據傳過來
總體而言,管道流的目的,也就是為了線程通信
此外,還有PipedReader和PipedWriter類,操作原理都一樣,這里就不再贅述了
DataOutputStream和DataInputStream類
實例4:基本數據類型的寫入

復制代碼 代碼如下:

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) {
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
DataOutputStream d = null;
try {
//此處需要傳入一個OutputStream類的對象
d = new DataOutputStream(new FileOutputStream(path));
//開始寫入基本數據類型
d.writeInt(12);
d.writeBoolean(true);
d.writeDouble(12.2223);
d.writeChar(97);
//刷新流
d.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
d.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

此處我們并不能直觀看懂內容,因為它采用字節流的方式操作,而不是字符流
我們只需要知道,此程序已經將基本數據類型寫入到硬盤即可


實例5:基本數據類型的讀取

復制代碼 代碼如下:

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Demo {
public static void main(String[] args) {
String path = File.separator + "home" + File.separator + "siu" +
File.separator + "work" + File.separator + "demo.txt";
DataInputStream d = null;
try {
d = new DataInputStream(new FileInputStream(path));
//按存儲順序讀取基本數據類型
System.out.println(d.readInt());
System.out.println(d.readBoolean());
System.out.println(d.readDouble());
System.out.println(d.readChar());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
d.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

這里要注意的是,一定要按照寫入順序讀取,否則會發生數據的打印錯誤

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品午夜一区二区欲梦| 国产又爽又黄的激情精品视频| 亚洲国产精品成人精品| xxav国产精品美女主播| 欧美激情精品久久久久久蜜臀| 久久夜色精品国产| 亚洲国产精品一区二区久| 91在线播放国产| 一色桃子一区二区| 欧美黑人狂野猛交老妇| 国产亚洲精品久久| 伊人青青综合网站| 国产成一区二区| 欧美专区在线视频| 中文字幕久精品免费视频| 91中文在线观看| 美女999久久久精品视频| 国产精品视频自拍| 久久亚洲成人精品| 亚洲日本欧美日韩高观看| 38少妇精品导航| 久久精品美女视频网站| 日韩高清免费观看| 日韩视频免费中文字幕| 国产v综合ⅴ日韩v欧美大片| 91免费视频网站| 97欧美精品一区二区三区| 亚洲欧美日韩另类| 激情久久av一区av二区av三区| 欧美午夜性色大片在线观看| 欧美伊久线香蕉线新在线| 欧美黄网免费在线观看| 亚洲一区www| 国产一区二区日韩| 成人av电影天堂| 国产精品va在线| 成人444kkkk在线观看| 欧美xxxx14xxxxx性爽| 精品成人在线视频| 欧美性xxxx极品hd满灌| 日韩国产精品亚洲а∨天堂免| 在线观看久久av| 国产一区二区丝袜| 日韩欧美在线国产| 国产精品自产拍在线观看| 孩xxxx性bbbb欧美| 国产女同一区二区| 26uuu亚洲伊人春色| 国产综合在线看| 欧美激情精品久久久久| 国产精品一区二区3区| 久久久www成人免费精品| 日韩大片免费观看视频播放| 久久中国妇女中文字幕| 国内自拍欧美激情| 亚洲午夜女主播在线直播| 欧美精品成人91久久久久久久| 一区二区三区高清国产| 久久久久一本一区二区青青蜜月| 懂色av一区二区三区| 成人久久久久久久| 38少妇精品导航| 懂色av一区二区三区| 日韩国产高清视频在线| 久久国产精品久久久| 日本最新高清不卡中文字幕| 国内揄拍国内精品少妇国语| 亚洲黄一区二区| 57pao国产精品一区| 国内精品久久久久影院优| 91久久久久久久久久久久久| 精品久久久久久久久久久久| 亚洲欧美激情在线视频| 欧美成年人网站| 日本精品视频在线播放| 91香蕉嫩草影院入口| 久久精品国产久精国产思思| 81精品国产乱码久久久久久| 九色精品美女在线| www.日本久久久久com.| 88国产精品欧美一区二区三区| 欧美一区二区视频97| 国产成人97精品免费看片| 一区二区三区高清国产| 久久免费精品视频| 国产精品美女av| 欧美疯狂xxxx大交乱88av| 日韩精品在线免费观看视频| 国产欧美日韩中文| 亚洲在线观看视频| 久久精品国产精品| 日韩精品久久久久久福利| 国产女人18毛片水18精品| 4438全国亚洲精品在线观看视频| **欧美日韩vr在线| 欧美日韩在线第一页| 欧美乱大交xxxxx| 成人免费淫片aa视频免费| 欧美精品少妇videofree| 国产精品欧美在线| 亚洲日本中文字幕| 国产精品一区二区三区成人| 久久国产精品偷| 国产有码一区二区| 日本亚洲精品在线观看| 成人性教育视频在线观看| 亚洲国产精品专区久久| 日韩成人久久久| 色噜噜狠狠狠综合曰曰曰88av| 亚洲一区免费网站| 欧美www视频在线观看| 欧美性xxxx在线播放| 欧美极度另类性三渗透| 美女黄色丝袜一区| 国产精品揄拍500视频| 日韩激情第一页| 91av在线视频观看| 国产精品69av| 精品久久久久久久久久久| 久久精品国产亚洲| 中文字幕成人精品久久不卡| 欧美成人午夜激情视频| 国产精品爱啪在线线免费观看| 日韩电影网在线| 亚洲欧美国产日韩中文字幕| 日韩高清电影免费观看完整版| 欧美极品美女视频网站在线观看免费| 亚洲国产一区二区三区四区| 亚洲精品ady| 久久精品视频va| 亚洲精品国产精品国自产观看浪潮| 欧美精品videossex88| 亚洲欧美日韩精品久久亚洲区| 中文字幕av一区二区| 色噜噜国产精品视频一区二区| 欧美成人亚洲成人| 欧美性高潮床叫视频| 日韩久久精品成人| 亚洲日本成人网| 亚洲第一页自拍| 精品中文视频在线| 精品国偷自产在线| 亚洲国产私拍精品国模在线观看| 亚洲国产97在线精品一区| 欧美精品videossex性护士| 91在线观看免费高清完整版在线观看| 日韩女在线观看| 97精品欧美一区二区三区| 国产日韩欧美另类| 欧美一区二区三区免费视| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲乱亚洲乱妇无码| 日韩欧美在线播放| 欧美成人精品三级在线观看| 91po在线观看91精品国产性色| 91视频国产精品| 精品国产31久久久久久| 色爱av美腿丝袜综合粉嫩av| 亚洲综合中文字幕在线观看| 成人中文字幕在线观看| 久久久综合免费视频| 久久99精品视频一区97| 国产精品你懂得| 欧美日韩人人澡狠狠躁视频|