posts - 14,  comments - 7,  trackbacks - 0
  2010年11月1日
       

        刚学java流技术IO编程时,一下出来这么多流,很是不敏感,不感冒,在学习了这段时间,发现好多项目中的读写数据,输入输出用到的都是以前学的最基本的,但是自己却不是很理解其根本,今天就说几个流中简单但又常用的几个知识点

   Java.io包中定义了多个流类型,来实现输入输出功能:

    •  按数据流的方向不同可以分为输入流和输出流。(以程序的角度来考虑)
    • 如:输入流InputStream Reader 输出流 OutputStream Writer
    •  按处理数据单位不同可以分为字节流和字符流。
    • : 字节流 InputStream OutputStream 字符流 Reader Writer
    •  按照功能不同可以分为节点流和处理流。

        通俗的说节点流就是一个简单的输入输出流,而处理流是“连接”在已存在的字节流或处理流之上的,通过对数据的处理为程序提供更为强大的读写功能。

 我们最经常用到的节点流类型是有关文件处理的有FileReader FileWriter FileInputStream FileOutputStream

Ø          FileInputSteam FileOutputStream 类支持其父类InputStream OutputStream 所提供的数据读写方法。

Ø       注意:

§         在实例化FileInputStreamFileOutputSteam流时要用trycatch语句以处理其可能抛出的FileNotFoundException

§         在读写数据时也要用trycatch语句以处理可能抛出的 IOException

§         FileNotFoundExceptionIOException的子类

FileReader FileWriter 分别继承自ReaderWriterFileInputSteamFileOutputStream类似,所不同的时FileReaderFileWriter向文件输入和输出的数据单位为字符。

     处理流中常用到的有缓冲流 、转换流。

l          缓冲流有BufferedReader BufferedWriter BufferedInputStream BufferedOutputStream ,缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法

l          BufferedReader提供了readLine方法用于读取一行字符串(以"r"n           隔)。

l          BufferedWriter提供了newLine用于写入一个行分隔符。

l          对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法将会使内存中的数据立刻写出。

Socket编程中接受信息时,不是直接用InputStream接收,而是把内容放入缓冲之中进行读取 ,在Socket中的简单应用如下
  

package com.dr.Echo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {

    
/**
     * 
@param args
     * 
@throws IOException 
     
*/

    
public static void main(String[] args) throws IOException {
        
// TODO Auto-generated method stub
         ServerSocket server = null;
         PrintStream out 
= null;
         BufferedReader buf 
= null;
         server 
= new ServerSocket(9999);
         Socket client 
= null;
         
while(true){
             
//不断接收数据
             client = server.accept();
             
//准备好像客户端输出内容
             out = new PrintStream(client.getOutputStream());
             
//而且客户端要有输入给服务器端
             buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
             
//下面先给出一个完整的信息提示
             out.println("您好!欢迎光临:http://wwww.tstc.edu.cn");
             out.println(
"输入bye表示退出哈-");
             
while(true){
                 
//接受客户端发送而来的内容
                 String str = buf.readLine();
                 System.out.println(
"client's data is "+str);
                 
if(str == null){
                     
//如果str为空就表示退出
                     break;
                 }
else{
                     
//如果输入的是bye则表示是退出系统
                     if("bye".equals(str)){
                         
break;
                     }

                     out.println(
"xiaoxiao:"+str);
                 }

             }

             out.close();
             buf.close();
             client.close();
         }

    }


}

 

package com.dr.Echo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class EchoClient {

    
/**
     * 
@param args
     * 
@throws IOException 
     * 
@throws UnknownHostException 
     
*/

    
public static void main(String[] args) throws UnknownHostException, IOException {
        
// TODO Auto-generated method stub
         Socket client = null;
         BufferedReader buf 
= null;
         PrintStream out 
= null;
         client 
= new Socket("127.0.0.1",9999);
         buf 
= new BufferedReader(new InputStreamReader(client.getInputStream()));
         System.out.println(buf.readLine());
         System.out.println(buf.readLine());
         BufferedReader in 
= new BufferedReader(new InputStreamReader(System.in));
         
         String userInput 
= null;
         out 
= new PrintStream(client.getOutputStream());
         
while((userInput = in.readLine())!=null){
             out.println(userInput);
             System.out.println(buf.readLine());
         }

         out.close();
         in.close();
         client.close();
         
         
    }


}

   

      转换流InputStreamReader OutputStreamWriter 用于字节数据到字符数据之间的转换。其中InputStreamReader 需要和InputStream”套接OutputStreamWriter需要和OutputStream套接

      数据流DataInputStream DataOutputStream 提供了可以存取与机器无关的java原始数据类型

l              Print流:PrintWriterPrintStream都属于输出流,分别针对与字符和字节,PrintWriterPrintStream提供了重载的printPrintln方法用于多种数据类型的输出。PrintWriterPrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。PrintWriterPrintStream有自动flush功能

l           

 这几个流的类型都是在以后的学习中经常用到的。就不一一做例子啦

 

         以后所学到的所有流类型都是继承 InputStream OutputStream Reader Writer 这四个抽象的流类型

posted @ 2011-01-18 22:26 迷人笑笑 阅读(856) | 评论 (0)编辑 收藏
     摘要:           我相信大多说人都对构造方法、方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望大家多多讨论。         ...  阅读全文
posted @ 2010-11-12 16:43 迷人笑笑 阅读(39124) | 评论 (1)编辑 收藏
     摘要:        今天我们用实例程序说一下java中常见的生产者与消费者的问题。  首先看一下里面线程间的通信问题:    一个线程向数据存储空间添加数据(生产者),另一个线程从数据存储空间去出数据(消费者)。 这个程序中有两个可能出现的问题需要考虑: 1、   ...  阅读全文
posted @ 2010-11-10 23:07 迷人笑笑 阅读(2133) | 评论 (1)编辑 收藏
     摘要: 项目需求:1.病人来挂号时根据自己想找的医生挂相应的医生的号,即加到相应医生的病人队列中。                    2.医生看见自己的屏幕,点击自己的名字,得到自己相应列表的下一位病人 具体代码如下: ...  阅读全文
posted @ 2010-11-02 16:51 迷人笑笑 阅读(3389) | 评论 (1)编辑 收藏
     摘要: 1.当我们去银行办理什么业务的时候总会先在一个类似电脑的小系统上去一个号,然后等着,当被叫到时就去相应的窗口办理业务,这种排队的小系统主要用到了接口Queue,因为它符合队列的要求先进先出。 2.还有就是有种特殊情况就是,银行的金卡用户,他们的权限较高,总可以在普通用户的前面办理业务 相应代码如下: package com.dr.queue; public clas...  阅读全文
posted @ 2010-11-01 13:22 迷人笑笑 阅读(3743) | 评论 (0)编辑 收藏
<2010年11月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(13)

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜