A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高铭 中级黑马   /  2012-3-31 12:17  /  3481 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

操作的数据是否是纯文本
        是:字符流
        不是:字节流
毕老师视频上说判断流有三个明确,其中一个是判断操作的是否纯文本
个人感觉还是使用字节流比较方便
我感觉只要文本中不是汉字就可以用字节流 这样解释可以吗

8 个回复

倒序浏览
字符流处理的单元为2个字节的Unicode字符,而字节流处理单元为1个字节。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是图片、歌曲,媒体文件就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串,因此你说的的只要文本不是汉字就可以用字节流也不能算错,字节流可以操作所有对象,不管是不是汉字。
字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以

回复 使用道具 举报
纯文本不代表就是全汉字
字节流  中的字节 代表计算机中的单位

图片   视频 mp3都是由字节组成的
你用字符流 搞 图片 视频 试试
回复 使用道具 举报
其实任何文本都可以使用字节流的   因为字符流是基于字节流的
   存在电脑里的文本也好文件也好 都是以字节码存储的  至于毕老师说的纯文本也是以字节存储在电脑里的
  而他说的数据时纯文本用字符流  其实有隐含条件的   那就是这个纯文本不管你是复制或者是读取到其他地方  最终显示出来要是纯文本的
  也就是人可以看懂的文本 那就应该使用字符流来操作,如果你复制或者读取文件 不牵扯自己看懂  只是想保存到某处的话  可以用字节流的
回复 使用道具 举报
IO分两种流

字节流 InputStream OutputStream

字符流 Reader  Writer

他们都是抽象类

具体实现
字节流 FileInputStream  FileOutputStream
字符流 FileReader    FileWriter


字节流转换成字符流可以用 InputSteamReader  OutputStreamWriter

转换成BufferdReader  BufferedWriter 他们具有缓冲区

例如:读取文件 从字节流输入到字符流输入
定义一个字节流:

Java代码
FileInputStream fileInputStream = new FileInputStream("d:/text.txt");  // 定义一个指向D:/TEXT.TXT 的字节流   
   
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);   
//字节流转换成InputStreamReader   
   
BufferedReader bufferedReader = new BufferedReader(inputSteamReader);   
//InputStreamReader 转换成带缓存的bufferedReader   
FileInputStream fileInputStream = new FileInputStream("d:/text.txt");  // 定义一个指向D:/TEXT.TXT 的字节流
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
//字节流转换成InputStreamReader
BufferedReader bufferedReader = new BufferedReader(inputSteamReader);
//InputStreamReader 转换成带缓存的bufferedReader



可以把读出来的内容赋值给字符

Java代码
   
String ss = new String();   
String s;   
while((s = bufferedReader.readLine())!=null){   
    ss += s;   
}   
String ss = new String();
String s;
while((s = bufferedReader.readLine())!=null){
ss += s;
}


例如:写入文件  从字节流输出到字符流输出

Java代码
   
FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt"); //定义一个   
   
指向D:/TEXT.TXT文件     
   
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);   
   
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);   
   
bufferedWriter.write(s);   
   
bufferedWriter.close();   
outputStreamWriter.close();   
fileOutputStream.close();   
回复 使用道具 举报
翟友伟 发表于 2012-3-31 13:26
纯文本不代表就是全汉字
字节流  中的字节 代表计算机中的单位

我的意思是 都用字节流   能不用字符就不用字符 尽量用字节流 虽然有的时候字符流效率稍高 也用字节流
搞文本也用字节流
回复 使用道具 举报
李成 中级黑马 2012-3-31 19:47:06
7#
所有文件都可以用字节流传递 但是你想获取流中的内容 并且还要以人看的懂的方式显示出来那就需要字符流了。
存文本文件操作用字符流 说白了字符流是给人看的。
字节流是计算机看的懂得,存二进制形式就算你知道文件内容是什么,以字符流形式显示出来我估计你也不知道显示的是什么内容。
如果只涉及到读取以及写入 文件 也就是只 复制 移动 文件那么字节流就可以并且效率还高点,但是你要读取文件并且以人能看得懂的方式显示到终端并且显示其内容那么就要用字符流。
回复 使用道具 举报
一、按数据来源(去向)分类:

1 、是文件:FileInputStream, FileOutputStream, ( 字节流)FileReader,

FileWriter( 字符)
简单来说,IO流用来处理设备之间的数据传输,它包括字节流与字符流。对任何数据的操作完全可以用字节流来表示,后来为了更方便处的理文本类数据,出现了字符流。字符流是融合了编码的字节流。字符流属于字节流。总之,是为了方便人的使用。

2 、是byte[] :ByteArrayInputStream, ByteArrayOutputStream( 字节流)

3 、是Char[]: CharArrayReader, CharArrayWriter( 字符流)

4 、是String: StringBufferInputStream, StringBufferOuputStream ( 字节

流)StringReader, StringWriter( 字符流)

5 、网络数据流:InputStream, OutputStream,( 字节流) Reader, Writer( 字符流)

二、按是否格式化输出分:

1 、要格式化输出:PrintStream, PrintWriter

三、按是否要缓冲分:

要缓冲:BufferedInputStream, BufferedOutputStream,( 字节流)

BufferedReader, BufferedWriter( 字符流)

四、按数据格式分:

1 、二进制格式(只要不能确定是纯文本的): InputStream, OutputStream 及其所有带

Stream 结束的子类

2 、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer 及其所有带Reader,

Writer 的子类
简单来说,IO流用来处理设备之间的数据传输,它包括字节流与字符流。对任何数据的操作完全可以用字节流来表示,后来为了更方便处的理文本类数据,出现了字符流。字符流是融合了编码的字节流。字符流属于字节流。总之,是为了方便人的使用。
回复 使用道具 举报
字节流就是最基本的计算机0|1代码模式。计算机内部交流完全没问题。而字符流是基于字节流的,只是形式不同。字符流是您能看得懂的。计算机翻译字符流也是作为字节流读取的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马