java io 文件讀寫 網路UDP/TCP

java io流 傳輸操作

java io 文件讀寫 網路UDP/TCP
 

字節流和字符流的區別:

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

處理對象不同:字節流能處理所有類型的數據(如圖片、avi等),而字符流只能處理字符類型的數據。

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

常用    字節流:

FileInputStream                 //字符流讀文件

FileOutputStream              //字符流寫文件

BufferedInputStream         //帶緩沖區的 讀文件

BufferedOutputStream       //帶緩沖區    寫文件

字符流:

Writer Reader

FileReader                //文件讀

FileWriter                //文件寫

BufferedReader        //緩存讀操作

BufferedWriter         //緩存寫操作

創建一個可以往文件中寫入字符數據的字符輸出流對象,如果文件不存在,則會自動創建。如果文件存在,則會被覆蓋。

因爲不同系統換行符號不同所以,可以調用系統函數獲得換行符號,便于不同系統移植

privatestaticfinal 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();


更多相關文章
  • import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Scanner; /** * S ...
  • [轉載]轉:關于java文件讀寫.字節流.字符流的一點新得 關于編碼方式我們不講,有興趣自己去看,這裏大概提一下. UTF-16采用等幅編碼,即每個字符占2個字節.優點:簡單:缺點:西文會膨脹到200%,冗余!而且字與字之間的疆界不好找,容易劃分錯誤,沒有考慮好前綴問題.這一點huffman編碼做的 ...
  • Android遊戲之文件讀寫類和繪圖類設計 1.基礎知識:A. FileInputStreamhttp://developer.android.com/reference/java/io/FileInputStream.htmlB. FileOutputStreamhttp://developer. ...
  • C文件讀寫函數介紹(轉) 2010-01-28 10:35 1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen實現三個功能:爲使用而打開一個流,把一個文件和此流相連接,給此流返回一個FILR指針. ...
  • 文件讀寫展示只支持NSString ,NSDictionary , NSArray, NSData 以及他們的子類.    寫入文件 :writeToFile: (這是對象的調用方法)    讀取文件:  每個類自帶的能夠根據文件路徑參加對象的方法:[類名 類+WithContentsOfFile: ...
  • 課程首頁地址:http://blog.csdn.net/sxhelijian/article/details/7910565 眼見到了期末,同學們各種忙與學期初.學期中完全不同.積累代碼行的事情擱置一邊可以理解,也不應在此時再抓了.第17周只要求一個專案,另外可以總結整個課程了.題目少,但關于二進制 ...
  • Java中如何讀寫cookie
    Java中刪除cookie  Cookie[]   cookies=request.getCookies();       //cookies不爲空,則清除       if(cookies!=null)       ...{           String   value=cookies[0]. ...
  • 在android中的文件放在不同位置,它們的讀取方式也有一些不同. 本文對android中對資源文件的讀取.數據區文件的讀取.SD卡文件的讀取及RandomAccessFile的方式和方法進行了整理.供參考. 一.資源文件的讀取:       1) 從resource的raw中讀取文件數據: [ja ...
一周排行