流之阅读器和书写器(过滤器阅读器和过滤器书写器)

InputStreamReaderOutputStreamWriter类就是相当于输入和输出流之上的装饰器,把面向字节的接口改为面向字符的接口。完成之后,就可以在它们之上使用面向字符的过滤器阅读器或过滤器书写器。与过滤器流一样,有很多子类可以完成特定的过滤工作,包括:

  • BufferedReader
  • BufferedWriter
  • LineNumberReader
  • PushbackReader
  • PrintWriter

BufferedReader和BufferedWriter类是基于字符的,对应于面向字节的BufferedInputStream和BufferedOutputStream类。BufferedInputStream和BufferedOutputStream中使用一个内部字节数组作为缓冲区,相应地,BufferedReader和BufferedWriter使用一个内部字符数组作为缓冲区。

当程序从BufferedReader读取时,文本会从缓冲区得到,而不是直接从底层输入流或其他文本源读取。当缓冲区请空时,将用尽可能多的文本再次填充,尽管这些文本不是全部都立即需要,这样可以使以后的读取速度更快。当程序写入一个BufferedWriter时,文本被放置在缓冲区中。只有当缓冲区填满或者当书写器显式刷新输出时,文本才会被移到底层输出流或其他目标,这使得写入也要快得多。

BufferedReader和BufferedWriter也有与阅读器和书写器关联的常用方法,如:read(),ready(),writer()和close()。这两个类都有两个构造函数,可以将BufferedReader或BufferedWriter串链到一个底层阅读器或书写器,并设置缓冲区的大小,如果没有设置大小,则使用默认的大小8192字符:

public BufferedReader(Reader in,int bufferSize)
public BufferedReader(Reader in)
public BufferedWriter(Writer out)
public BufferedWriter(Writer out,int bufferSize)

我们使用BufferedReader来对上一节的示例重构一下:

package io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputStreamReaderTest {
    public static void main(String[] args) {
        //注意这里
        try(BufferedReader reader = new BufferedReader(new InputStreamReader(        
                new FileInputStream(new File("/home/fuhd/text")),"UTF8"),1024)){
            int c;
            StringBuffer sb = new StringBuffer();
            while((c = reader.read()) != -1){
                sb.append((char)c);
            }
            System.out.println(sb.toString());
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

BufferedReader类还有一个readLine()方法,它读取一行文本,并作为一个字符串返回:

public String readLine() throws IOException

这个方法可以替代DataInputStream中已经废弃readLine()方法,它与该方法的行为基本相同。主要的区别在于,通过将BufferedReader串链到InputStreamReader,你可以采用正确的字符集读取行,而不是采用平台的默认编码方式。如例:

package io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputStreamReaderTest {
    public static void main(String[] args) {
        try(BufferedReader reader = new BufferedReader(new InputStreamReader(    
                new FileInputStream(new File("/home/fuhd/text")),"UTF8"),1024)){
            System.out.println(reader.readLine());    //这里直接读一行
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

这个BufferedWriter类增加了一个其超类所没有的新方法,名为newLine(),也用于写入一行:

public void newLine() throws IOException

这个方法向输出插入一个与平台有关的行分隔符字符串。line.separator系统属性会确定这个字符串是什么:在Unix和Mac OS X下可能是换行,在Mac OS 9下是回车,在windows下是回车/换行对。由于网络协议一般会指定所需的行结束符,所以网络编程中不要使用这个方法,而应当显式地写入协议所需的行结束符。大多数情况下,所需的结束符都是回车/换行对。

时间: 2024-12-16 09:43:41

流之阅读器和书写器(过滤器阅读器和过滤器书写器)的相关文章

插件和过滤器装饰器开发中的感悟-python-django

写这篇随笔是因为今天自己在写插件和过滤方法的过程中碰壁了,折腾了好久终于稍微发现些问题,在此记下,以作备忘. 在看了xadmin的插件机制后,笔者也想使用该思想来扩展kadmin中视图的方法. 例如,在一个登陆视图中,一般的逻辑如下: class LoginView(BaseAdminView): '''登陆视图''' auth_form=None#用于认证的表单类 login_template=None title="" def update_login_params(self,de

五款PC端小说阅读器 readbook、非常酷阅读器、iSilo、AlReader、haalireader

        本文主要推荐的是功能强大界面简单电脑(windows系统)单机使用的小说阅读器~以阅读TXT之流的主流类小说文件,只想要会联网会更新可以发评论发微博的朋友可以节省点时间,按ctrl+w吧~觉得想要单机软件的朋友请继续往下看~          这篇博文居然还在有人点击和回复,有点出乎我的意料,当初写这篇文章的本意是因为发现想搜一个简单实用的单机阅读器实在是困难重重,搜索结果总是被各大广告阅读器干扰,千辛万苦终于找到之后觉得应该分享一下以飨同好:虽然时间过去了蛮久,但从回复的朋友来

传智播客JavaWeb day14--监听器(用户踢人)、过滤器(解决全站乱码)

1. 2. 3. 4. 5. filter应用 1.用过滤器解决全站乱码问题 1.1 乱码分类 乱码分为get和post方式请求乱码 1.2 post请求乱码解决 post请求乱码很好解决只需一行代码搞定request.setCharacterEncoding("utf-8")告诉服务器用utf-8来获取参数即可 1.3 get请求乱码解决 问题:不能针对某个参数去解决乱码问题,因为过滤器是全站通用的,其他的请求可能没有这个参数,所以想到改造获取请求参数的三个方法,而直接继承的方式会有

springboot(十七):过滤器(Filter)和拦截器(Interceptor)

概述 在做web开发的时候,过滤器(Filter)和拦截器(Interceptor)很常见,通俗的讲,过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西:拦截器可以简单理解为“拒你所想拒”,关心你想要拒绝掉哪些东西,比如一个BBS论坛上拦截掉敏感词汇. 资料 https://www.cnblogs.com/toutou/p/9831678.html 原文地址:https://www.cnblogs.com/cnki/p/10357811.html

过滤器(Filter)与拦截器(Interceptor )区别

目录 过滤器(Filter) 拦截器(Interceptor) 拦截器(Interceptor)和过滤器(Filter)的区别 拦截器(Interceptor)和过滤器(Filter)的执行顺序 拦截器(Interceptor)使用 过滤器(Filter)使用 拦截器(Interceptor)和过滤器(Filter)的一些用途 demo 总结 参考资料 正文 回到顶部 过滤器(Filter) Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,

springboot 拦截器与servlet的过滤器

springboot 是spring框架的二次升华,简化了配置,提高了开发效率.拦截器是spring 提供的基于AOP思想的实现.过滤器filter是servlet的API,比较依赖servlet,他们有不同也有一些相似的地方. 1Filter基于servlet ,主要用于servlet存在的环境.拦截器用于servlet,也可以用于其他环境中. 2Filter是servlet规范来提供支持,拦截器是spring框架来提供支持. 3Filter的使用主要在servlet的前后,拦截器可以深入到每

Solr文本分析剖析【文本分析、分词器详解、自定义文本分析字段及分词器】

一.概述 Solr文本分析消除了索引词项与用户搜索词项之间的语言差异,让用户在搜索buying a new house时能找到类似的内容,例如:purchasing a new home这样的文档.如果搭配恰当,文本分析就能允许用户使用自然语言进行搜索,而无需考虑搜索词项的所有可能形式.毕竟谁也不想看到为了相似搜索而构造这样的查询表达式:buying house OR purchase home OR buying a home OR purchasing a house .... 用户可以使用

拦截器和过滤器的区别

拦截器和过滤器都可以用来实现横切关注功能,其区别主要在于: 1.拦截器是基于java反射机制的,而过滤器是基于函数回调的. 2.过滤器依赖于servlet容器,而拦截器不依赖于servlet容器. 3.拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用. 4.拦截器可以访问Action上下文.值栈里的对象,而过滤器不能. 5.在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次. 过滤器,是在java web中,你传入的request,resp

struts2中拦截器和过滤器的比较

拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 4.拦截器可以访问action上下文.值栈里的对象,而过滤器不能 5.在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 拦截器 :是在面向切面编程(AOP)的就是在你的service或者一个方法前调用一个方法,或者在方法后调用