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();
		}
posted @ 2020-03-03 19:12  Ysalng  阅读(198)  评论(0编辑  收藏  举报