inputstreamreader是什么流,Java中关于输入输出流的几个父类分别是什么?
inputstreamreader是什么流,Java中关于输入输出流的几个父类分别是什么?详细介绍
本文目录一览: InputStream和Reader的区别
java.io下面有两个抽象类:InputStream和Reader
InputStream是表示字节输入流的所有类的超类
Reader是用于读取字符流的抽象类
InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。
即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。
弄清了两个超类的根本区别,再来看他们底下子类的使用,这里只对最常用的几个说明
Java中各种的Reader,如BufferedReader,各种的Stream,什么InputStream,BufferStream,什么时候该用什么
凡是有reader,stream分情况看;
根据数据类型:reader,字符流,stream字节流;
字符流不能直接输出,需要转换成字节流才能输出!
JAVA分为字节流(Stream结尾)和字符流(Reader、Write结尾),再分为输入流(InputStream、Reader)和输出流(OutputStream、Write),输入输出相对于内存而言。
在读字符的时候用字符流,如文本文件、XML等。在读二进制文件时候用字节流,如RAR、EXE等不是文本以外的文件。
Buffered开头的流只是加了缓冲区,为了读写提高效率。
Java中关于输入输出流的几个父类分别是什么?
字节流常用基类:
InputStream,OutputStream
字符流常用基类:
Reader Writer
转换流:
InputStreamReader:字节流通向字符流的桥梁 用于操作字节流的字符流对象
OutputStreamWriter:字符流通向字节流的桥梁 用于操作字符流的字节流对象
IO流的主要操作就是读/写 文件了。。。
如图:输入流是:InputStream和Writer
输出流是:OutputStream和Reader
java 中 BufferedReader BufferedWriter与InputStreamReader OutputStreamWriter 用法
BufferedReader:它是带有缓存的字符流,用它可以包装fileReader用来读取文件,它有一个方法不是一般的爽,那就是readline()方法,可以一行一行的读。
BufferedWriter:它也是带有缓存的字符流,用它可以包装filewriter用来写东西到文件里,它也有一个方法很好用,那就是writeline()方法,可以一行一行的写。
InputStreamReader 和OutputStreamWriter都是字符转换流,也都是用来操作文件的,其实流你只要掌握住规律就行了
字节流与字符流的区别是什么?
字节流与字符流主要的区别是他们的的处理方式
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化
这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联
在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的
在从字节流转化为字符流时,实际上就是byte[]转化为String时,
public String(byte bytes[], String charsetName)
有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang
而在字符流转化为字节流时,实际上是String转化为byte[]时,
byte[] String.getBytes(String charsetName)
也是一样的道理
至于java.io中还出现了许多其他的流,按主要是为了提高性能和使用方便,
如BufferedInputStream,PipedInputStream等
stream结尾都是字节流,reader和writer结尾都是字符流
两者的区别就是读写的时候一个是按字节读写,一个是按字符。
实际使用通常差不多。
在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。
只是读写文件,和文件内容无关的,一般选择字节流。
编码方式不同决定处理文件类型不同,字节流(ASCII)处理二进制文件,字符流(Unicode)处理文本文件,仅此而已。
字节流与字符流主要的区别是他们的的处理方式
字节流是最基本的,采用ASCII编码,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,采用Unicode编码.它是按虚拟机的encode来处理,也就是要进行字符集的转化
这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联
你只要把java处理字节流和字符流的类搞清楚就行了!
字节流 字符流
输入InputStream Reader
其它的类都是继承这四个基本类的!
打扰 InputStreamReader 可以处理Unicode 为什么啊,简单解释就行。
这个嘛,人家就是可以啊.... = = 不是很清楚你的疑惑在哪里,我只能尝试理解一下你的意思
因为它是一个Reader,而不是InputStream。InputStream是字节流,它只认识字节,而Reader则是在字节流的基础上包装了一层,应用不同编码来解析字节流。你可以看InputStreamReader 的API,它的构造函数中是可以接受一个Charset作为参数的
java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
【答案】:
字节流, 字符流。字节流继承于InputStream OutputStream , 字符流继承于
InputStreamReader OutputStreamWriter。在java.io 包中还有许多其他的流,主要是为了
提高性能和使用方便。
请问Java 当中:输入流中的System.in是什么意思
可对比System.out,它是往控制台输出
而System.in是往控制台输入
API中的字段in的介绍System
public static final InputStream in“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
InputStreamReader是字节流通向字符流的桥梁
BufferedReader比Reader效率更高
//从控制台获得输入
public void readByLineFromConsoleAndPrint(){
System.out.println("==从控制台获得输入==");
try{
BufferedReader in=new BufferedReader(
new InputStreamReader(System.in));
System.out.println("请输入一行字符:");
temp=in.readLine();
System.out.println(temp);
}catch(IOException ioe){
ioe.printStackTrace();
}
}
首先明确一个概念
InputStreamReader 和BufferedReader都是输入流
System.in 读取的是字节流
InputStreamReader读取的是字符流
BufferedReader读取的是字符串
System.in 和InputStreamReader属于低级流
BufferedReader属于高级流
通过高级流封装低级流 使我们更加方便操作
为InputStream类型,代表标准输入流,默认的数据源为键盘。程序可以通过Systen.in读取标准输入流的数据!
简单说:它是标准输入流,就是键盘输入流
一个 InputStreamReader 类是从字节流到字符流的桥梁:它读入字节,并根据指定的编码方式,将之转换为字符流。使用的编码方式可能由名称指定,或平台可接受的缺省编码方式。
InputStreamReader 的 read() 方法之一的每次调用,可能促使从基本字节输入流中读取一个或多个字节。为了达到更高效率,考虑用 BufferedReader 封装 InputStreamReader,例如:
InputStreamReader in = new InputStreamReader(System.in);
// System.in为系统基本输入输出,即键盘输入.调用System.in方法获得输入字符串,并用该字符串作为参数生成一个InputStreamReader对象in
BufferedReader dr = new BufferedReader(in);
//用InputStreamReader对象in作为参数生成一个IBufferedReader对象dr.用BufferedReader 封装 InputStreamReader,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
关键要素说明:InputStreamReader 是将标准输入字节流转换为用于输入的字符流;BufferedReader将字符流转换为缓冲流,利用缓冲流的API的函数System.in读入命令行输入的一行字符,并赋值给字符串变量。
InputStreamReader.read()详解
在最一开始,我们先明确InputStreamReader和InputStream的区别:InputStreamReader用于读取字符,而InputStream用于读取字节
public abstract int read() throws IOException
从输入流中读取数据的一个字符(可以从中读入一个字节序列的对象称为输入流,这些字节序列可以来自文件、网络、内存块)。
以整数的形式返回读入的这个字符(其实就是ASC码) ,也就是一个0-255的整数。
如果已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
public int read(byte[] cbuf, int offset, int length) throws IOException
将输入流中最多 length个字符读入 byte 数组(缓冲区)。尝试读取 length 个字符,但读取的字节也可能小于该值。
以整数形式返回实际读取的字符数 。
如果已经到达流末尾而没有可用的字符,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
如果 len 为 0,则不读取任何字节并返回 0;否则,尝试读取至少一个字符。如果因为流位于文件末尾而没有可用的字字符,则返回值 -1;否则,至少读取一个字节并将其存储在 b 中。
将读取的第一个字节存储在元素 b[offset] 中,下一个存储在 b[off+1] 中,依次类推。读取的字符数最多等于 length。设 k 为实际读取的字节数,这些字节将存储在 b[offset] 到 b[off+k-1] 的元素中,不影响 b[off+k] 到 b[off+len-1]的元素。
在任何情况下,b[0]到b[off]的元素以及b[off+len]到b[b.length-1]的元素都不会受到影响。
此方法重复调用方法 read()。如果第一次这样的调用导致 IOException,则从对 read(cbuf, offset, length) 方法的调用中返回该异常。如果对 read()的任何后续调用导致IOException,则捕获该异常并将其视为到达文件末尾;到达该点时读取的字符存储在 cbuf 中,并返回发生异常之前读取的字节数。在已读取输入数据len的请求数量、检测到文件结束标记、抛出异常前,此方法的默认实现将一直阻塞。建议子类提供此方法更为有效的实现。