构造js函数未定义 InputStreamReader(InputStream)未定义

java中的InputStream、OutputStream以及Reader、Writer
& & &&Java中I/O操作主要是指使用Java进行输入,输出操作。Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。在JavaAPI中,可以从其中读入一个字节序列的对象称作输入流;可以向其中写入一个字节序列的对象称作输出流。
& & & 在Java.io包中,操作文件内容主要有两大类:字节流与字符流,两类都分为输入与输出操作。在字节流中,输入操作主要是使用InputStream完成,输出操作主要是使用OutputStream完成;在字符流中,输出主要是使用Writer完成,输入主要是使用Reader完成。我们存储在磁盘中的文件都是以字节存储来完成的,那些文件中的字符都是先编码成字节,然后再存储到磁盘中。在读取文件时(特别是文本文件),也是一个字节一个字节地读取以形成字节序列。由于面向字节的流不便于处理Unicode形式(Unicode中每个字符都使用了多个字节来表示)存储的信息,所以从抽象类Reader和Writer中继承出来的专门用于处理Unicode字符的类。字符流处理的单元为2个字节的Unicode字符,而字节流处理单元为1个字节,所以处理中文文本,用字符流好点,但是如果处理的是音频文件、图片、歌曲,就还是用字节流好点(因为这些文件在磁盘上的存储是字节,如果用字符去读的话,涉及到转换问题,会损坏原文件)。
& & &InputStream是一个抽象类,是所有数据形式为字节的输入流的父类,为基于字节的数据输入定义了基本操作方法。实际上,InputStream的子类大部分都没有增加其任何其他的接口函数。其子类有FileInputStream、StringBufferInputStream、FilterInputStream等。FileInputStream用于顺序访问本地文件,用于读取诸如图像数据之类的原始字节流,从超类InputStream中继承了read,close等方法,对文件进行操作,它的两个常用的构造方法是:FileInputStream(String filePath/*文件的全称路径*/); FileInputStream(File fileObj/*描述该文件的File对象*/);StringBufferInputStream类的本意是把字符串转换为字节流,然后进行读操作,但是在这个类中仅仅使用了字符编码的低8位,不能把字符串中的所有字符正确转换为字节,因此这个类被废弃,取而代之的是StringReader类;FilterInputStream是为了提高读取效率和经常用的读取类型,从而通过嵌套过滤器来添加多重功能,其实例化参数是InputStream,所以是在InputStream的基础上增强一些功能。
& & FilterInputStream下比较常用的子类有BufferedInputStream、DataInputStream、PushBackInputStream等。BufferedInputStream的数据成员buf是一个位数组,默认字节为2048字节。当读取数据来源时,BufferedInputStream会尽量将buf填满,当使用read()方法时,实际上是先读取buf中的数据,而不是直接对数据源作读取。当buf中的数据不足时,BufferedInputStream才会再实现给定的InputStream对象的read()方法,从指定装置中提取数据,其实这也用到了操作系统中的局部原理。DataInputSteam主要是借用InputStream通过类型转换实现readInt,readBoolean功能。PushbackInputStream主要提供可以将数据插入到输入流前端的能力,能够插入的最大字节数与推回缓冲区的大小相关。
& & & & & & &BufferedInputStream 定义方式为: & & &InputStream in=new BufferedInputStream(new FileInputStream(fileName));
& & & & & & &DataInputStream 定义方式为: & & & & & &DataInputStream din=new DataInputStream(new FileInputStream(fileName));
& & OutputStream的用法与InputStream的用法类似,这里就不再多说!
& & &Reader是所有数据形式为字符的输入流的父类,其子类有BufferedReader、CharArrayReader、FilterReader、InputStreamReader和StringReader等。BufferedReader主要是从字符流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取,其最大特点就是缓冲区的设置,通常reader所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求,如果没有缓冲,每次调用read()或readLine()都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。使用BufferedReader可以指定缓冲区的大小,或者可以使用默认的大小。InputStreamReader是字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符,它使用的字符集可以由名称指定或显示给定,或者接受平台默认的字符集。构造方法主要有InputStreamReader(InputStream in)、InputStreamReader(InpuStream in,CharSet cs)等。每次调用InputStreamReader中的一个read()方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作的字节,为了达到最高效率,可以考虑在BufferedReader内包装InputStreamReader。例如:
& & & & & &BufferedReader in=new BufferedReader(new InpuStreamReader(System.in))
& & Writer的方法类似于Reader,这里不再多说!
& &总体来说,整个java.io的核心都是采用了Decorator(装饰)模式,理解了Decorator(装饰)模式,对java I/O的学习就更加容易了。建议大家在学习时,将java.io的类结构图打印出来,在以后使用时再拿出来看下,就知道如何使用了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
本分类共有文章12篇,更多信息详见
& 2012 - 2016 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";随笔 - 218&
评论 - 66&
&&&&&&&&&&&
java.io下面有两个抽象类:InputStream和ReaderInputStream是表示字节输入流的所有类的超类Reader是用于读取字符流的抽象类InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。弄清了两个超类的根本区别,再来看他们底下子类的使用,这里只对最常用的几个说明InputStream&&& | __FileInputStream&FileInputStream 从文件系统中的某个文件中获得输入字节。构造方法摘要&&FileInputStream (File& file)&&&&&&&&&& 通过打开一个到实际文件的连接来创建一个 FileInputStream ,该文件通过文件系统中的 File 对象 file 指定。&FileInputStream (FileDescriptor& fdObj)&&&&&&&&&& 通过使用文件描述符 fdObj 创建一个 FileInputStream ,该文件描述符表示到文件系统中某个实际文件的现有连接。&FileInputStream (String& name)&&&&&&&&&& 通过打开一个到实际文件的连接来创建一个 FileInputStream ,该文件通过文件系统中的路径名 name 指定。&&&Reader&& |&&BufferedReader&&& |___InputStreamReader&&&&&&&&& |__FileReader&BufferedReader : 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。&构造方法摘要&&BufferedReader (Reader& in)&&&&&&&&&& 创建一个使用默认大小输入缓冲区的缓冲字符输入流。&BufferedReader (Reader& in, int sz)&&&&&&&&&& 创建一个使用指定大小输入缓冲区的缓冲字符输入流。&BufferedReader (Java Platform SE 6)&BufferedReader的最大特点就是缓冲区的设置。通常Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求,如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。&使用BufferedReader可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。&因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和InputStreamReader)。例如,&&BufferedReader in&& = new BufferedReader(new FileReader("foo.in"));&将缓冲指定文件的输入。&InputStreamReader (Java Platform SE 6)&InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。&&构造方法摘要&&InputStreamReader (InputStream& in)&&&&&&&&&& 创建一个使用默认字符集的 InputStreamReader。&InputStreamReader (InputStream& in, Charset& cs)&&&&&&&&&& 创建使用给定字符集的 InputStreamReader。&InputStreamReader (InputStream& in, CharsetDecoder& dec)&&&&&&&&&& 创建使用给定字符集解码器的 InputStreamReader。&InputStreamReader (InputStream& in, String& charsetName)&&&&&&&&&& 创建使用指定字符集的 InputStreamReader。&&每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。&为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:&&BufferedReader in = new BufferedReader(new InputStreamReader(System.in));InputStreamReader最大的特点是可以指转换的定编码格式,这是其他类所不能的,从构造方法就可看出,这一点在读取中文字符时非常有用FileReader1)FileReader类介绍:InputStreamReader类的子类,所有方法(read()等)都从父类InputStreamReader中继承而来;2)与InputStreamReader类的区别:构造方法摘要&&FileReader (File& file)&&&&&&&&&& 在给定从中读取数据的 File 的情况下创建一个新 FileReader 。&FileReader (FileDescriptor& fd)&&&&&&&&&& 在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader 。&FileReader (String& fileName)&&&&&&&&&& 在给定从中读取数据的文件名的情况下创建一个新 FileReader&&该类与它的父类InputStreamReader的主要不同在于构造函数,主要区别也就在于构造函数!从InputStreamReader的构造函数中看到,参数为InputStream和编码方式,可以看出,当要指定编码方式时,必须使用InputStreamReader类;而FileReader构造函数的参数与FileInputStream同,为File对象或表示path的String,可以看出,当要根据File对象或者String读取一个文件时,用FileReader;我想FileReader子类的作用也就在于这个小分工吧。该类与它的父类InputStreamReader的主要不同在于构造函数,主要区别也就在于构造函数!从InputStreamReader的构造函数中看到,参数为InputStream和编码方式,可以看出,当要指定编码方式时,必须使用InputStreamReader类;而FileReader构造函数的参数与FileInputStream同,为File对象或表示path的String,可以看出,当要根据File对象或者String读取一个文件时,用FileReader;我想FileReader子类的作用也就在于这个小分工吧。二 联系与区别&(1)字符与字节:&FileInputStream 类以二进制输入/输出,I/O速度快且效率搞,但是它的read()方法读到的是一个字节(二进制数据),很不利于人们阅读,而且无法直接对文件中的字符进行操作,比如替换,查找(必须以字节形式操作);而Reader类弥补了这个缺陷,可以以文本格式输入/输出,非常方便;比如可以使用while((ch = filereader.read())!=-1 )循环来读取文件;可以使用BufferedReader的readLine()方法一行一行的读取文本。(2)编码InputStreamReader ,它是字节转换为字符的桥梁。 你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。&FileReader与InputStreamReader 涉及编码转换(指定编码方式或者采用os默认编码),可能在不同的平台上出现乱码现象!而FileInputStream 以二进制方式处理,不会出现乱码现象.&因此要指定编码方式时,必须使用InputStreamReader 类,所以说它是字节转换为字符的桥梁;(3) 缓存区&&& BufferReader类用来包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和InputStreamReader)。(4)规范用法总结以上内容,得出比较好的规范用法:&1) File file = new File ("hello.txt");&FileInputStream in=new FileInputStream (file);&2) File file = new File ("hello.txt");&FileInputStream in=new FileInputStream (file);&InputStreamReader inReader=new InputStreamReader (in,"UTF-8");&BufferedReader bufReader=new BufferedReader(inReader);&3) File file = new File ("hello.txt");&FileReader fileReader=new FileReader(file);&BufferedReader bufReader=new BufferedReader(fileReader);
阅读(...) 评论()> 问题详情
在通常情况下,下列()类的对象可以作为BufferedReader类构造函数的参数。A.InputStreamReaderB.P
悬赏:0&答案豆
提问人:匿名网友
发布时间:
在通常情况下,下列()类的对象可以作为BufferedReader类构造函数的参数。A.InputStreamReaderB.PrintStreamC.OutputStreamReaderD.PrintWriter请帮忙给出正确答案和分析,谢谢!
论文写作技巧
您可能感兴趣的试题
1下列叙述中,正确的是(  )。A.Serializable是一个处理字节流的一般类B.Serializable是一个处理对象流的抽象类C.Serializable是一个处理非流类的接口D.Serializable是一个处理对象流的接口2下列关于线程组的叙述中,正确的是(  )。A.线程默认是继承父进程的线程组B.线程在创建时可以不确定其归属的线程组,可以在执行过程中更改C.在Java的应用程序中的首个线程组可以是main,也可以是其他,视实际情况而定D.线程组中包含任意数目的线程,但不能包含线程组
我有更好的答案
相关考试课程
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……

我要回帖

更多关于 js函数未定义 的文章

 

随机推荐