谁能给我讲讲java.io.InputStream、java.io.InputStreamReader、java.io.OutputStream、java.io.OutputStreamWriter都在哪里使用?
就是刚学J2SE的时候遇到了他们,然后是做上传的时候又碰到了他们。然后项目中从来没使用过他们,渐渐地,我对他们生疏了(本来学的时候就很抽象)除此之外,他们安安稳稳地躲在JAVA SE API的某个角落里
谁能帮我讲讲什么项目中使用他们好吗?有什么比较好的例子推荐下好吗?我看看,多了解了解这4个家伙

解决方案 »

  1.   

    1.InputStream
    字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream,DateInputStream等.
    2.OutputStream
    输出字节流的所有类的超类,与InputStream对应,它的子类名与上面对应.
    3.InputStreamReader
    字节流通向字符流的桥梁,它将字节流转换为字符流.
    4.OutputStreamWriter
    是字符流通向字节流的桥梁,它将字符流转换为字节流.
      

  2.   

    首先告诉你两个概念:字符流:你可以把它理解为字符串;字节流:你可以把它理解为二进制流
    其次纠正一下你的问题;InputStream和InputStreamReader是没有可比性的!
      与InputStream相对应的是Reader,InputStream是处理字节流的抽象类,Reader是处理字符流的抽象类,两个抽象类中最主要的方法都是read()方法;
      同理,与OutputStream相对应的抽象类是Writer,两个抽象类中最主要的方法是writer()
    最后告诉你:InputStreamReader是Reader的一个子类,Reader是他爹,InputStream是他大爷,所以不能拿他和他大爷相比较,哈哈,这么说你明白了吧;
      OutputStreamWriter和OutputStream也是侄子和大爷的关系
      

  3.   

    首先告诉你两个概念:字符流:你可以把它理解为字符串;字节流:你可以把它理解为二进制流
    其次纠正一下你的问题;InputStream和InputStreamReader是没有可比性的!
      与InputStream相对应的是Reader,InputStream是处理字节流的抽象类,Reader是处理字符流的抽象类,两个抽象类中最主要的方法都是read()方法;
      同理,与OutputStream相对应的抽象类是Writer,两个抽象类中最主要的方法是writer()
    最后告诉你:InputStreamReader是Reader的一个子类,Reader是他爹,InputStream是他大爷,所以不能拿他和他大爷相比较,哈哈,这么说你明白了吧;
      OutputStreamWriter和OutputStream也是侄子和大爷的关系
      

  4.   

    感谢2楼、4楼朋友的热心帮助
    但是你们的答案,我随便在google上搜搜,都能搜出来一堆一堆得答案,正如3楼的朋友所说
    我想要的答案是谁能帮我讲讲什么项目中使用他们好吗?有什么比较好的例子推荐下好吗?
    也就是说,我想真正把这几个家伙用到项目中去,而不是死抠他们的概念、API
      

  5.   

    项目中的例子倒是不少,只是看你是否有心自己去做例子。
    比如说:做Web开发的时候,FLEX或是AJAX请求服务端一个URL,请求的信息是XML的流文件。
    就可以用request.getInputStream()来接收,对流文件进行处理。byte[] buffer = new byte[128];
    int len = 0;
    InputStream inputStream = request.getInputStream();
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    while((len = inputStream.read(buffer)) >= 0) {
        bytes.write(buffer, 0, len);
    }
    System.out.println(bytes.toString());
      

  6.   

    看看我通过FileInputStream进行文件上传的例子:import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.upload.FormFile;import com.myStruts.form.UploadForm;public class FileUploadAction extends Action {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
    if(((UploadForm)form).getFormFile() != null){
    //获得保存文件的FormFile对象
    FormFile formFile = (FormFile)((UploadForm)form).getFormFile();
    /** 处理文件名 */
    String oldName = formFile.getFileName();
    String extendName = "";
    if(oldName.lastIndexOf(".") != -1){
    extendName = oldName.substring(oldName.lastIndexOf("."));
    }
    String newName = dateFormat.format(new Date())+extendName;

    /** 进行读写操作 */
    File uploadFile = new File(newName);
    BufferedOutputStream bufOut = new BufferedOutputStream(
    new FileOutputStream(uploadFile));

    byte[] totalBytes = formFile.getFileData();
    bufOut.write(totalBytes);
    bufOut.flush();
    bufOut.close();
    }
    return mapping.findForward("upload_success");
    }
    }记住,Java提供了很多类处理各种输入输出,它们分别是处理字节流,字符流,文件流,数据流,对象流的类,一般我们用的最多的就是字节流,字符流,文件流处理类
      

  7.   

    概念什么的比较麻烦,可以这么理解FileInputStream fis = new FileInputStream("c:/a.txt");  设置读取文件的路径,只是指向文件所在位置,并不做操作,可以通过fis.read()将文件内容读出来FileOutputStream out=new FileOutputStream("c://b.txt"); 设置写入文件的路径,同上,只是将设置要将文件写入到什么位置,给出路径而已 PrintStream p=new PrintStream(out);   将文件写入到给出的位置
    Reader与Writer同上面一样,只是读写字符,不是字节FileReader fr=new FileReader("c:/a.txt");   设置文件路径BufferedReader br=new BufferedReader(fr);   读取文件
    FileWriter fw=new FileWriter("c://b.txt");   设置写入路径PrintWriter out=new PrintWriter(fw);         写入,PrintWriter(File name)使用指定文件创建不具有自动行刷新的新 PrintWriter
      

  8.   

    这些东西随便找一本Java的基础 的书都会有非常详细的介绍