zoukankan      html  css  js  c++  java
  • javaIO流的结合使用

    InputStream,InputStreamReader和BufferedReader

    1. InputStream:抽象类,基类,为面向字节的I/O,用于读写文本,它能输出字节流;
    2. InputStreamReader : 是字节流与字符流之间的桥梁,能将字节流输出为字符流,并且能为字节流指定字符集,可输出一个个的字符;
    3. BufferedReader : 提供通用的缓冲方式文本读取,readLine读取一个文本行, 从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

    使用场景

    有时我们需要把来自于"字节"层次结构的类和"字符"层次结构的类结合起来使用,为了实现这个目的,必须要使用到适配器类(adapter),InputStreamReader可以将InputStream(字节流)转化为Reader(unicode字符流),OutputStream也是如此。

    例如可以把读入的字节流转换成字符流输出:

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response)  IOException {
            InputStream inputStream = request.getInputStream();//通过输入流获取客户端传来的数据流
            Reader reader =  new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(reader);
            //通过输出流将数据流输出到本地硬盘
    
            String path = request.getServletContext().getRealPath("file/copy.txt");//获取文件的绝对路径
            FileOutputStream outputStream = new FileOutputStream(path);//用来打开一个输入文件
            Writer writer = new OutputStreamWriter(outputStream);//创建字符写入流
            BufferedWriter bufferedWriter = new BufferedWriter(writer);//使用缓冲流包装
            String str = "";
            while((str = bufferedReader.readLine())!=null){
                bufferedWriter.write(str);
            }
            bufferedReader.close();
            reader.close();
            inputStream.close();
            //对于这里Writer和bufferwriter来说,由于Writer是被修饰者,所以应该先关闭bufferWriter()修饰者,否则会抛出异常
            bufferedWriter.close();
            writer.close();
            outputStream.close();
            }
    

    DataOutputStream与outputStream以及BufferedReader共同使用

    当文件流和缓冲区流的处理是字节或者字节数组时,利用DataOutputStream可以实现对文件不同数据类型的读写。

    JavaIO流之DataOutputStream

    try {
    			Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 8001); //需要服务端先开启
    
    			//同一个通道,服务端的输出流就是客户端的输入流;服务端的输入流就是客户端的输出流
    			OutputStream ops = s.getOutputStream();  //开启通道的输出流
    			DataOutputStream dos = new DataOutputStream(ops);//使用DataOutputStream实现字节到String类型的转变
    			while (true)
    			{
    				String strWord = brKey.readLine();
    				if (strWord.equalsIgnoreCase("quit"))
    				{
    					break;
    				}
    				else
    				{
    					System.out.println("I want to send: " + strWord);
    					dos.writeBytes(strWord + System.getProperty("line.separator"));//将字符串按字节顺序写出到基础输出流中
    				}
    			}
    			dos.close();
    			s.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
  • 相关阅读:
    openwrt的内核版本是在哪个文件中指定的?
    git如何将一个分支合并到另一个分支?
    cygwin如何下编译安装tmux?
    如何合并ts文件?
    在cygwin下创建的文件位于windows的哪个目录下?
    linux shell的for循环语法是怎样的?
    内部类访问局部变量时,为什么需要加final关键字
    Java8函数式编程的宏观总结
    Maven私服使用经验总结
    java关于Integer设置-128到127的静态缓存
  • 原文地址:https://www.cnblogs.com/innndown/p/12404052.html
Copyright © 2011-2022 走看看