Java高手请进

关于IO输出输入,字节流文件和字符文件但底是怎么定义的?能举个通俗的例子吗?... 关于IO输出输入,字节流文件和字符文件但底是怎么定义的?能举个通俗的例子吗? 展开
 我来答
wangdg
2010-02-02
知道答主
回答量:81
采纳率:0%
帮助的人:0
展开全部
所有文件都是由2进制(01码)构成的。如果一个文件中01码所代表的全都是可打印的字符,那么这个文件就是文本文件,也就是你说的字符文件。如果01码所代表的内容,不都可以转化成可打印的字符,那么这个文件就是一般所说的2进制文件,即字节流文件。实际上,字符文件是一种特殊的字节流文件。

换句话说:字符文件用InputStreamReader正常读取,没有乱码。而字节流文件就不一定了。
Raymondguo008
2010-02-02 · TA获得超过1634个赞
知道小有建树答主
回答量:887
采纳率:100%
帮助的人:475万
展开全部
找了半天。终于找到原来的笔记了。。。
送你~\(≥▽≤)/~啦啦啦
祝你好运!!!
常联系。

流的分类:

(1)节点流 处理流(过滤流、装饰流)

流是通道,文件和进程是节点。
跟文件相连的流叫节点流,不跟文件相连的叫通道流。
其实都想象成管子就行。
读取数据最终还是读到程序中去,流只是通道而已。
服务器端和客户端都可以建立流,只要两个流的接口名相同,数据就可以传递,也就是所谓连接上了。

节点流:是可以从一个特定的数据源(节点)读写数据的流。(如:文件、内存)

处理流:是“连接”在已经存在的流(节点流或者处理流)之上,通过对数据的处理为程序提供更为强大的读写功能的流。

基础是四个:InputStream OutputStream Reader Writer

节点流的类型:

类型 字符流 字节流

File(文件) FileReader FileInputStream
FileWriter FileOutputStream

Memory Array CharArrayReader ByteArrayInputStream
CharArrayWriter ByteArrayOutputStream

Memory String StringReader ---
StringWriter ---

Pipe PipedReader PipedInputStream
PipedWriter PipedOutputStream
*****************************************************************************************************************************

处理流的类型:

类型 字符流 字节流

Buffering BufferedReader BufferedInputStream
(缓冲流) BufferedWriter BufferedOutputStream

Filtering FilterReader FilterInputStream
(过滤流) FilterWriter FilterOutputStream

Converting between InputStreamReader
bytes and character OutputStreamWriter
(转换流)
Object --- ObjectInputStream
Serialization --- ObjectOutputStream
(序列化和反序列化)
Data conversion --- DataInputStream
(数据转换流) --- DataOutputStream

Counting LineNumberReader LineNumberInputstream

Peeking ahead PushbackReader PushbackInputStream

Printing PrintWriter PrintStream

*****************************************************************************************************************************

(2)输入/输出流 字节流/字符流(2个字节)
(8bit/16bit)

字节流 字符流

输入流 InputStream Reader

输出流 OutputStream Writer

*****************************************************************************************************************************

字节流与字符流主要的区别

字节流与字符流主要的区别是他们的的处理方式
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的unicode来处理,也就是要进行字符集的转化
这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联
在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的

在从字节流转化为字符流时,实际上就是byte[]转化为String时,
public String(byte bytes[], String charsetName)
有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang
而在字符流转化为字节流时,实际上是String转化为byte[]时,
byte[] String.getBytes(String charsetName)
也是一样的道理

*****************************************************************************************************************************

java-节点流

1、三种基本类型的节点:

文件、内存和管道(从一个进程或线程式到另外一个进程或线程的通道)

2、

类型 字符流 字节流

文件 FileReader FileInputStream

FileWriter FileOutputStream

内存:数组 CharArrayReader ByteArrayInputStream

CharArrayWriter ByteArrayOutputStream

内存:字符串 StringReader N/A

StringWriter

管道 PipedReader PipedInutStream

PipedWriter PipedOutputStream

3、这些流处理起来容易出错,提供了一些处理流的一种流,这种流专门处理流,可以一次一行地读取一个流,比如BufferedReader读,BufferedWriter写

1)

FileReader input=new FileReader(args[0]);

BufferedReader bufinput=new BufferedReader(input);

String line;

line=bufinput.readLine();

2)

FileWriter output=new FileWriter(args[1]);

BufferedWriter bufoutput=new BufferedWriter(output);

String line;

line=bufouput.newLine();

bufoutput.write(line,0,line.length);

*****************************************************************************************************************************

java-处理流

1、在另一个流上执行某种类型的转换,也称过滤流,当尝试从过滤输入流对象读数据时,该对象能提供源自其他输入流对象的字符。

2、处理流类型列表

类型 字符流 字节流

缓冲 BufferedReader BufferedInputStream

BufferedWriter BufferedOutputStream

过滤 FilterReader FilterInputStream

FilterWriter FilterOutputStream

字节和字符间转换 InputStreamReader

OutputStreamWriter

执行对象序列化 ObjectInputStream

ObjectOutputStream

执行数据转换 DataInputStream

DataOutputStream

计算 LineNumberReader LineNumberInputStream

向前查看 PushbackReader PushbackInputStream

打印 PrintWriter PrintStream

3、字节与字符转换

1)

字节和字符间转换 InputStreamReader

OutputStreamWriter

转换规则是缺省的平台字符编码字节和UNICODE之间转换,也可以指定如:new InputStreamReader(System.in,"ISO-8859-1")

2)StringReader和StringWriter处理JAVA技术String对象的节点字符流

*****************************************************************************************************************************
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
23746021
2010-02-03 · TA获得超过1467个赞
知道小有建树答主
回答量:384
采纳率:0%
帮助的人:397万
展开全部
字节流,顾名思义就是按照一个一个字节去传输,对于字节流而言,它看不到在其内部传输的数据是什么编码,它只认识010101这样构成的字节数据。

字符流,既然叫字符了,肯定有编码了,所以字符流是一种拥有某种格式的数据,这样我们就能安全地用它传输汉字等字符了,当然传英文字符更是可以了。

字节流之所以容易出现乱码,主要是传输的两端对原始数据的编解码格式不一致造成的,与流本身无关,换句话说,并不是流把原本好好的数据弄成乱码了,是程序员在流的接收端拿到数据后,不知道它是什么编码了,就给弄错了。

举个例子,你可以先把一串汉字按照某个字符集解码成010101,即byte[]。然后通过字节流传过去,接收的时候,前提是你已知了它的字符集,那么你就按照当初解码的这个字符集再编码回去,就还原了那一串汉字。

但是你不可能总是预料到对方的编码方式(字符集),所以Java就推出了一个叫字符流的东西,说,既然你们两个都不确认该用什么进行编解码,那就都用我给你们定义的这个东西吧(字符流),你们都用我这个东西,就达成一致了,就不会乱码了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bellCliff
2010-02-02 · TA获得超过650个赞
知道小有建树答主
回答量:820
采纳率:0%
帮助的人:610万
展开全部
所有的字符流最终都是转换为字节流来存储,那么,简单就是所有文件都是字节存储
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式