java 标准Io流

我想问下,为什么java里面要有
标准IO流,有了字节流和字符流,不就可以了吗。
为什么啊,我晕。

12个回答

标准IO指计算机的的输入设备和输出设备,搞这些的吧,为了兼容不同系统,不同物理设备的输入与输出!

标准IO流不就是包括字节流和字符流吗?概念没搞清楚吧

=。=概以为标准流就是字节流和字符流。。。。或者再加上System.in System.out System.err

这是同个概念啊,大哥

Java流包括字节流和字符流,字节流通过IO设备以字节数据的方式读入,而字符流则是通过字节流读入数据转化成字符“流”的形式由用户驱使。
流可以通过包装进行功能上的扩充,比如说BufferedStream,可以缓冲流,提高读取的性能,其实在Java中都是以这种操作IO的。
但是我们不能把BufferedStream当成是实际可用的流,其实它们必须包装一个代表真实的IO设备的流才能操作,比如说System.in和System.out,或者是数组和字符串(另一种包装的流)。
比如说InputStream可以这样用:
InputStream in = new BufferedInputStream(new BufferedInputStream(System.in));
而字符流呢?
其实字符流没有实际的形式,只能是通过包装一些特别的输入流才能进行字符操作,比如说包装字节流InputStream:
Reader reader = new InputStreamReader(System.in);
再比如说包装字符数组:
char[] in = new char[1024];
Reader reader = new CharArrayReader(in);
了解这些后,就能明白流的操作规律了。

java IO流 字节流与字符流比较,区别

首先看字节流:

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("d://bat.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d://batbat.txt"));
int b = 0;

while((b = bis.read()) != -1){
bos.write(b);
}
System.out.println("文件写入成功");
bis.close();
bos.close();

再来看字符流:

BufferedReader br = new BufferedReader(new FileReader("d://bat.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("d://batbat.txt"));
String str = null;

while((str=br.readLine())!= null){
bw.write(str);
bw.newLine(); //读取完一行换行
}
System.out.println("字符流文件写入成功");
br.close();
bw.close();

io流中的字节流,就是传输数据的时候,一个一个字节的传输,
字符流,就是以一个字符来传输。
我们知道字符的长度,是字节长度的两倍。而且中文是用字符来表示的,这时候把中文这种一个字符表示的数据,用字节,分成两次来传输就会出现问题,常见的是中文显示为问号。

编程时常是 用包装后的 bufferedReader 和 BufferedWriter,和 PrinterWriter
因为带有缓冲区,可以减少硬盘读写次数,保护硬盘

PrintStream可以自动进行字符转换的动作,可以将基本数据类型的数据格式化成字符串输出,默认会使用操作系统的编码来处理对应的字符转换动作。当然你也可以使用PrintStream(OutputStream out, boolean autoFlush, String encoding)这个构造函数来制定你需要的编码。

DataOutputStream 是将数据,无论什么类型,都是通过二进制形式存储起来。

虽然同为字节流,这只能证明读取和写入的时候通过一个一个字节来分,但是写入文件时使用什么形式是根据他们本身来定义的。

[code="java"]
DataOutputStream写入一个字节时,使用01 的形式写入。
PrintStream将一个字节 根据当前默认的字符编码写入到文件,比如 a 字符是一个两个字节,它写入之前先解析成a来写入文件,并不是一下子只写一个字节。
[/code]

[quote]
但是还是像我最初问的,为什么java中有标准输入输出流这个概念?它存在的原因(意义)是什么?
[/quote]

无论外层怎么封装,只是在简化,在提高效率,在增加样式形式,而最终都要使用标准的IO进行IO的读写操作,因为最终要通过IO的形式写入硬盘,不管什么语言什么方式,对磁盘访问的方式底层是一致的。

[quote]为什么java中有标准输入输出流这个概念?它存在的原因(意义)是什么?[/quote]
标准输入输出流是一种标准,不单单java有,C C++都有标准输入输出流,只不过java语言设计也要符合这种标准设计。。。。。这个概念不是java创造出来的

DataOutputStream本来就是用来写二进制数据的,你直接打开test.txt
看到的是乱码,你用DataInputStream按你写的顺序读进来看就对了。也就是说DataOutputStream是与DataInputStream对应的。

DataOutputStream,对各个基本数据类型以及String 对象进行格式化,
并将其置入一个数据“流”中,以便任何机器上的DataInputStream 都能正常地读取它们。
若想进行一些真正的格式化输出,比如输出到控制台,请使用PrintStream。利用它可以打印出所有基本数据类型以及String 对象,并可采用一种易于查看的格式。这与DataOutputStream 正好相反,后者的目标是将那些数据置入一个数据流中,以便DataInputStream 能够方便地重新构造它们。System.out 静态对象是一个PrintStream。
PrintStream 内两个重要的方法是print()和println()。它们已进行了覆盖处理,可打印出所有数据类型。

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐