InputStream和Reader交换机和路由器的区别别

File,FileInputStream,FileReader,InputStreamReader,BufferedReader的使用区别
引言:&&&&C语言只需要一个File*就可以了,与C不同,java有一系列流类型,其数量超过60种。类库的设计者声称:&有足够的理由为用户提供丰富的流类型的选择:这样做可以减少程序的错误。&例如,在C语言种,许多人认为&将输出流写入一个只读模式的文件&是很常见的错误。(事实上,这并不常见。)我们认为在C++语言中,流接口设计者避免程序出错的主要&工具&是小心谨慎的态度,在java语言中更是如此。流库的高度复杂性迫使程序设计人员谨小慎微。&&&&
1.&& File类&&1 ) File 类介绍(《 core java 》 638 页)File 类封装了对用户机器的文件系统进行操作的功能。例如,可以用 File 类获得文件上次修改的时间移动,或者对文件进行删除、重命名。换句话说,流类关注的是文件内容,而 File 类关注的是文件在磁盘上的存储。File 类的主要方法有: getName(),getCanonicalFile(),lastModified(),isDerector(),isFile(),getPath()等;&
2 ) File 类与 FileInputStream 类的区别:流类关注的是文件内容,而 File 类关注的是文件在磁盘上的存储。&File 不属于文件流 , 只能代表一个文件或是目录的路径名而已。&提示:(《 core java 》 639 页)如果处理文件或者目录名,就应该使用 File 对象,而不是字符串。例如, File 类的 equals 方法知道一些文件系统对大小写是敏感的,目录尾的& / &字符无关紧要。&自己的领会:
FileInputStream 类或者 FileReader 类的构造函数有多个,其中典型的两个分别为:一个使用 File 对象为
参数;而另一个使用表示路径的 String 对象作为参数;自己以前一直觉得直接用了 String 指定路径就可以了,一直不明白为什么很多人都先构造一个 File 对象,现在终于明白了,&如果处理文件或者目录名,就应该使用 File 对象,而不是字符串。&!2.&&&&&&& FileInputStream 类1 ) FileInputStream 类介绍:
以字节为单位(非 unicode )的流处理。字节序列即:二进制数据。与编码无关,不存在乱码问题。
FileInputStream 类的主要方法有:Read (), read ( byte[] b ), read ( byte[],int off,int len ) ,available();&
2 ) FileInputStream 类与 FileReader 类的区别:两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String ,它们到底有何区别呢?l&&&&&&&&& Readers and Writers work only on line based character data, so plain text files.For anything else, you MUST use Streams.l&&&&&&&&& JDK5 API:FileInputStream is meant for reading streams of raw bytes such as image data. For reading streamsof characters, consider using FileReader.FileReader is meant for reading streams of characters. For reading streams of raw bytes, considerusing a FileInputStream .l&&&&&&&&&&FileInputStream :以字节流方式读取; FileReader :把文件转换为字符流读入;&
分享这篇日志的人也喜欢
素颜主播求抱抱
热门日志推荐
人人最热标签
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场InputStream类的read()方法是从流里面取出一个字节,他的函数原型是&int read();&,Reader类的read()方法则是从流里面取出一个字符(一个char),他的函数原型也是&int read();&。
我们都知道java使用的是UNICODE字符集,在java中字符和字符串都是使用UTF-16BE编码方式,即一个字符两个字节,在内存中高位在低字节,这也是BE的由来,BIG ENDIAN可以理解成大位的在开头,例如一个char的值是0XAC56,那么在内存中的形式就是AC 56,假设0XAC的内存地址为1,那么0X56的内存地址是2。
接下来再分析一下Reader与InputStream两个类中的read()都分别干了什么,InputStream类的read()方法只是简单的从输入流里面取出一个字节,然后返回他的值,Reader类的read()方法则是先判断出输入流使用的是何种编码方式(实际上如果我们不指定编码,则直接使用系统的默认编码作为输入流的编码,在中文Windows系统中默认为GB2312),然后用输入流的编码方式解码出一个字符(输入流的编码方式确定了也就确定了读取一个字符需要取出个字节),取出一个字符后再把这个字符用UTF-16BE编码并返回编码值,这就是read()方法返回的值。
&下面写一个小程序就可以证明上面的结论:
1.首先将同一个句话&周宣自然要慷慨表白一番,说得林岱连连点头,贤婿周宣是洪福之人,也只有他才能娶道蕴。&分别以UTF-8和UTF-16BE两种方式保存,用16进制编辑器打开查看:
2.Reader类的read()方法读取以UTF-8编码的txt:
1 import java.io.*;
2 class a {
public static void main(String[] s) throws IOException {
System.out.println("Reader类的read()方法读取");
FileInputStream fis = new FileInputStream("测试.txt");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
//System.out.println(isr.getEncoding());
int ch = 0;
int[] temp = new int[1024];
int i = 0;
while ((ch = isr.read()) != -1) {
temp[i++] =
System.out.print((char) ch);
System.out.print("\n\n");
System.out.println("每个字符的编码值:");
for (int j = 0; j & j++) {
if (j % 8 == 0 && j != 0) {
System.out.print("\n");
System.out.printf("%04X ", temp[j]);
输出结果如下:
Reader类的read()方法读取
周宣自然要慷慨表白一番,说得林岱连连点头,贤婿周宣是洪福之人,也只有他才能娶道蕴。
每个字符的编码值:
767D 4E00 756A FF0C 8BF4 5F97 6797 5CB1
8FDE 8FDE 70B9 5934 FF0C 8D24 5A7F 5468
5BA3 662F 6D2A 798F 4E4B 4EBA FF0C 4E5F
624D 80FD 5A36
可以看到Reader类的read()方法读取的每个char都是UTF-16BE编码保存的。
接下来用InputStream类的read()方法读取UTF-8编码的txt:
1 import java.io.*;
2 class b {
public static void main(String[] s) throws IOException {
System.out.println("InputStream类的read()方法读取");
int ch0 = 0, x = 0;
FileInputStream fis = new FileInputStream("测试.txt");
while ((ch0 = fis.read()) != -1) {
if (x++ % 16 == 0 && x != 0) {
System.out.print("\n");
System.out.printf("%02X ", ch0);
System.out.print("\n\n");
输出结果如下:
InputStream类的read()方法读取
E5 91 A8 E5 AE A3 E8 87 AA E7 84 B6 E8 A6 81 E6
85 B7 E6 85 A8 E8 A1 A8 E7 99 BD E4 B8 80 E7 95
AA EF BC 8C E8 AF B4 E5 BE 97 E6 9E 97 E5 B2 B1
E8 BF 9E E8 BF 9E E7 82 B9 E5 A4 B4 EF BC 8C E8
B4 A4 E5 A9 BF E5 91 A8 E5 AE A3 E6 98 AF E6 B4
AA E7 A6 8F E4 B9 8B E4 BA BA EF BC 8C E4 B9 9F
E5 8F AA E6 9C 89 E4 BB 96 E6 89 8D E8 83 BD E5
A8 B6 E9 81 93 E8 95 B4 E3 80 82 0D
阅读(...) 评论()BufferedReader、FileReader、FileInputStream的区别
- zhengqiqi的博客 - ITeye博客
博客分类:
BufferedReader
由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取分行文本很适合,BufferedReader是针对Reader的,不直接针对文件,也不是只针对文件读取。
FileReader是由java.io.InputStreamReade扩展来的,是针对文件读取的。
实际使用时往往用 BufferedReader bfrTemp = new BufferedReader(new FileReader("test.conf"));先建立一个文件reader,再用BufferedReader读。
FileInputStream
扩展自java.io.InputStream,InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。用Reader读取出来的是char数组或者String
,使用InputStream读取出来的是byte数组。
注:上文摘抄自
在这里感谢他~
zhengqiqi17
浏览: 1373 次InputStream和InputstreamReader的转换 - 学习交流 - ITeye博客
博客分类:
package com.
import java.io.F
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.IOE
import java.io.InputStreamR
import java.util.ArrayL
import java.util.L
public class Test {
* @param args
public static void main(String[] args) {
File file = new File("D:\\A.txt");
FileInputS
input = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(input);
String s = "";
List&String& list = new ArrayList&String&();
while((b=reader.read())!=-1){
if(b==10 || b==13){
list.add(s);
char c = (char)
s+=String.valueOf(c);
for(int j=0;j&list.size();j++){
System.out.println((String)list.get(j));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
package com.
import java.io.BufferedR
import java.io.F
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.IOE
import java.io.InputStreamR
import java.util.ArrayL
import java.util.L
public class Test {
* @param args
public static void main(String[] args) {
File file = new File("D:\\A.txt");
FileInputS
input = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(input);
BufferedReader breader=new BufferedReader(reader);
String s = breader.readLine();
while(s!=null){
System.out.println(s);
s = breader.readLine();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
浏览 14382
zhou_hong_liang
浏览: 74342 次
来自: 北京
你们要设置参数的啊,什么用户名,密码,IP都配置了吗?
houjuan1990 写道你好!我想请问一下;这代码测试通过 ...
你好!我想请问一下;这代码测试通过了吗?在我机器上运行到
/* ...
这个怎么使用呢?

我要回帖

更多关于 车厘子和樱桃的区别 的文章

 

随机推荐