java InputStream 文件讀寫 網絡UDP/TCP

java io流 傳輸操做java

 

字節流和字符流的區別:
緩存

讀寫單位不一樣:字節流以字節(8bit)爲單位,字符流以字符爲單位,字符流就是 : 字節流+編碼表。服務器

處理對象不一樣:字節流能處理全部類型的數據(如圖片、avi等),而字符流只能處理字符類型的數據。網絡

純文本數據優先考慮字符流 別的 字節流socket

經常使用    字節流:tcp

FileInputStream                 //字符流讀文件函數

FileOutputStream              //字符流寫文件編碼

BufferedInputStream         //帶緩衝區的 讀文件spa

BufferedOutputStream       //帶緩衝區    寫文件code

字符流:

Writer Reader

FileReader                //文件讀

FileWriter                //文件寫

BufferedReader        //緩存讀操做

BufferedWriter         //緩存寫操做

建立一個能夠往文件中寫入字符數據的字符輸出流對象,若是文件不存在,則會自動建立。若是文件存在,則會被覆蓋。

由於不一樣系統換行符號不一樣因此,能夠調用系統函數得到換行符號,便於不一樣系統移植

private static final String LINE_SEPARATOR = System.getProperty("line.separator");  //換行符

FileWriter fw = new FileWriter("demo.txt",true);  //建立一個文件
fw.write("abcde"+LINE_SEPARATOR+"hahaha");        //數據寫入到臨時存儲緩衝區中。
fw.flush();                                       //數據緩衝區刷到文件中
fw.close();                                       //這個其實會自動調用 flush;上面那樣寫 能夠實時保存

讀文件 單個字符模式

FileReader fr = new FileReader("demo.txt");      //打開要讀的文件
int ch = 0;
while((ch=fr.read())!=-1){                       //文件結束符 爲 -1 ,得到單個字符
    System.out.println((char)ch);                
}
fr.close();

單個字符讀,操做次數多,浪費資源,因而出現多個字符緩衝區方式讀取

FileReader fr = new FileReader("demo.txt");
char[] buf = new char[1024];                  //一次讀取 1024字節
int len = 0;
while((len=fr.read(buf))!=-1){
    System.out.println(new String(buf,0,len));
}
fr.close();

一個文件讀取寫入另外一個文件  規範的寫法 考慮拋異常

FileReader fr = null;
FileWriter fw = null;
try {
    fr = new FileReader("a.txt");
    fw = new FileWriter("b.txt");
			
    char[] buf = new char[BUFFER_SIZE];//緩衝區。 
    int len = 0;
			
    while((len=fr.read(buf))!=-1){
        fw.write(buf, 0, len);
    }
			
} catch (Exception e) {
	throw new RuntimeException("讀寫失敗");
}finally{

    if(fw!=null)  //證實打開的文件不爲空
        try {
	    fw.close();
	} catch (IOException e) {
	    e.printStackTrace();
	}
    if(fr!=null)
	try {
	    fr.close();
	} catch (IOException e) {
	    e.printStackTrace();
	}
}

java自己帶了緩存對象,能夠直接調用  文件打開 操做

FileWriter fw = new FileWriter("buf.txt");
BufferedWriter bufw = new BufferedWriter(fw);    //
String line = null;
while((line=bufr.readLine())!=null){          //一次 讀一行
    System.out.println(line);
}

FileWriter fw = new FileWriter("buf.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("abcdef"+x);
bufw.newLine();
bufw.flush();
bufw.close();                           //關閉緩衝區 防止內存泄露  這個不須要關閉 文件

字節流例子

FileInputStream fis = new FileInputStream("bytedemo.txt");
byte[] buf = new byte[1024];		
int len = 0;
		
while((len=fis.read(buf))!=-1){                    //文件沒結束
    System.out.println(new String(buf,0,len));
}


FileOutputStream fos = new FileOutputStream("bytedemo.txt");
		
fos.write("abcdefg".getBytes());	         //文件中寫入數據	
//fos.flush();
fos.close();//關閉資源動做要完成。

拷貝一首MP3文件

FileInputStream fis = new FileInputStream("c:\\0.mp3");	
BufferedInputStream bufis = new BufferedInputStream(fis);      //緩衝區方式
	
FileOutputStream fos = new FileOutputStream("c:\\2.mp3");
BufferedOutputStream bufos = new BufferedOutputStream(fos);
		
int ch = 0;	
while((ch=bufis.read())!=-1){
    bufos.write(ch);
}
	
bufos.close();                //關閉緩存區
bufis.close();

字符/字節流直接的轉換   InputStreamReader、OutputStreamWriter

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));    字節流到字符流

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("b.txt")));

字符流道字節流  轉換橋


java網絡通訊 UDP函數

DatagramSocket ds = new DatagramSocket(10000);         //UDP 綁定端口

while(true){

    byte[] buf = new byte[1024];
    DatagramPacket dp = new DatagramPacket(buf,buf.length);       //UDP包對象
	
    ds.receive(dp);//阻塞式的。
	
    //4,經過數據包對象的方法,解析其中的數據,好比,地址,端口,數據內容。
    String ip = dp.getAddress().getHostAddress();
    int port = dp.getPort();
    String text = new String(dp.getData(),0,dp.getLength());    //數據
	
    System.out.println(ip+":"+port+":"+text);	
}

ds.close();

UDPsend

DatagramSocket ds = new DatagramSocket();           
	
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
String line = null;
	
while((line=bufr.readLine())!=null){
			
    byte[] buf = line.getBytes();   
    DatagramPacket dp = 
    new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.100"),10000);  //udp發送包
    ds.send(dp);    
		
    if("886".equals(line))
        break;
}

ds.close();


TCP通訊對象  客戶端

Socket socket = new Socket("192.168.1.100",10002);          //服務器IP 端口
	
OutputStream out = socket.getOutputStream();	 //輸出的信息
out.write("tcp 輸出".getBytes());

InputStream in = socket.getInputStream();        //接收到的信息
byte[] buf = new byte[1024];
	
int len = in.read(buf);
	
String  text = new String(buf,0,len);
	
System.out.println(text);                

socket.close();

服務器端

ServerSocket ss = new ServerSocket(10002);

Socket s = ss.accept();                             //得到客戶端對象
		
String ip = s.getInetAddress().getHostAddress();   //得到客戶端IP
		
InputStream in = s.getInputStream();    //接收到的客戶端數據
byte[] buf = new byte[1024];
		
int len = in.read(buf);
String text = new String(buf,0,len);
System.out.println(ip+":"+text);
		
OutputStream out = s.getOutputStream();   //發送到客戶端數據
out.write("收到".getBytes());
		
s.close();
ss.close();
相關文章
相關標籤/搜索