java之字符流与字节流的区别和联系

作者&投稿:剑都 (若有异议请与网页底部的电邮联系)
java中字节流与字符流有什么区别?~

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

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

至于java.io中还出现了许多其他的流,按主要是为了提高性能和使用方便,
如BufferedInputStream,PipedInputStream等

Java字符流是处理字符(Char)对象用的,字节流是处理字节(Byte)对象用的。处理的目标对象不同,处理方法也就不一样了。

字符流处理的基本单位是字符(Java中的字符是16位的),输入流以Reader为基础,输出流以Writer为基础;
字节流的基本单位是字节(Java中的字节是8位的),输入流以 InputStream为基础,输出流以 OutputStream为基础;

字符流在输入时可以按字符读取,也可以按行读取,会去掉回车换行,常用于读取字符数据;
而字节流按字节读取,不作任何处理,常用于读取二进制数据。

Java中的字符在内部都是使用Unicode进行表示的,因此,要正确读取字符数据,需要知道字符的编码字符集,字符流提供编码字符集的指定,如果不指定使用系统默认的方式对字符数据进行编码转换,这个编码字符集不正确,会造成读进来的地字符出现乱码。

字节流虽然是读取二进制数据用的,但也可以读取字符文件,按字节进行处理,读进来之后可以根据编码字符集进行转换,也可以变成字符串。

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

内存中的表现不管他,知道一次读多少就好啦!
字符:二个字节
字节:一个字节
例:你现在要读一个汉字(以二个字节来存,既:一个字符)的“汉”。
1.用字符流读:一次读二个字节,那么你就可以完全读取到它,并存到你想存的地方。
2.用字节流读:一次读一个字节,那么你要读二次你才完全得读取到了这个汉字。不然就读取到了半个(一个汉字二个字节中的一个字节),那你说这半个(一个字节)是什么东西?我想这并不是你想要的吧。
还有一点挺有用的,就是在字符流中你可以一次读取一行(readLine()),这我想对于我们来说是一个不错的方法吧。


JAVA输入输出
ava中不存在你说的那种情况 因为java是采用unicode字符集 也就是说“安莎社ss554黄河 ”中的每个元素都是占据16位即两个字节 所以读的应该是 安 莎 社 s s 5 5 4 黄 河 结果都是一一对应的的unicode字符编码 "s"在文件内存中占一个字节不够一个字节的 系统自己用空格补默认的 ...

一次性搞懂字符集,编码,Unicode,Utf-8\/16,BOM...
那么ava里的char类型到底能不能存储中文字符,当然可以,但是仅对应BMP部分,各种繁体字生僻字就无能为力了。

java里字体名称是怎么定义的?
物理 字体是实际的字体库,包含字形数据和表,这些数据和表使用字体技术(如TrueType 或 PostScript Type 1)将字符序列映射到字形序列。Java Platform 的所有实现都支持 TrueType 字体;对其他字体技术的支持是与实现相关的。物理字体可以使用字体名称,如 Helvetica、Palatino、HonMincho 或任意数量的其他字体...

java都是学习什么课程?
就从基础开始说起 Javase Java基础所包含的,Java零基础必备安装包、JavaSE301集、Java教程零基础2019、Java教程零基础2019(ava基础语法、面向对象、异常、数组、常用类、集合、IO流、线程、反射机等等)、XML、Tomcat服务器开发;JavaWeb前端教程 HTML、CSS、JavaScript、jQuery、Ajax;Java数据库 MySQL、...

自学Java 怎么入门?
学习任何一门编程语言,首先要学习的是基础语法,开启Java学习的第一步,当然就是深入掌握计算机基础、编程基础语法,面向对象,集合、IO流、线程、并发、异常及网络编程,这些我们称之为JavaSE基础。当你掌握了这些内容之后,你就可以做出诸如:电脑上安装的迅雷下载软件、QQ聊天客户端、考勤管理系统等桌面端软件。 JavaSE基...

怎样根治AVA游戏花屏,本机配置绝对够!
在文本方式下的花屏表现为字符混乱,在图形方式下通常表现为图形分层,由于受到内部或外部的干扰还会产生水平条纹。以下是一些心得和经验,希望可以供大家参考。 1.显示器产生水平条纹:其原因主要有两种: 1)外部干扰,如显示器的使用现场附近有电火花或高频电磁干扰,这种干扰会使显示器的显示画面产生白色的水平条纹。处理...

Java学习安排!
java基础(j2se)的重点有:继承、多态、流、线程、网络编程、反射、集合、数据库连接、泛型、JNI技术、分布式技术还有解析xml也是很重要的,如果你想学android手机编程,那么SWING和AWT要熟悉一下。如果你不想学Web编程(j2ee),那么我建议你可以学android手机编程《Google+Android开发入门与实战》(入门) 《...

java学习作为一名java初学者,如何快速学习j
JAVA快速入门的方法:1、时刻提醒自己Java是一种OOP语言工具,而不仅仅是编码,只有这样才能总体把握和运用Java。2、在学习的过程中,最好能够【了解Java】的底层机制,而不是仅仅停留在表层,不是抄书上的例子运行出结果就可以。要注意,即便对一个简单的例子也要有耐心去琢磨、调试、改动。3、在学习的...

Java语言的特点
Java语言的封装性较强,因为Java无全程变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互操作。 可移植性:就是在这个系统上作的程序经过一次编译后可以移植到别的系统上解释执行,只要经过简单的粘贴和复制就行了,...

Java培训班一般都教什么内容?
Java培训一般会教下面四种内容:1、掌握Java语言的使用:语言语法、程序逻辑,OOP(面向对象)思想,封装、继承、多态,集合框架、泛型、File I\\O技术,多线程技术、socket网络编程,XML技术。编程有关的操作系统基本使用,HTML5规范、HTML5文档结构、HTML5元素、Web语义化;CSS3规范、CSS3选择器、层叠与...

呼兰县19746791811: Java中的字节流和字符流的区别? -
侨振枸橼: 字节流就是按照字节来进行传输,字符流是按照字符来传输.最基本的是字节流,字符流可以说是对字节流的一个包装流.比如你知道了一个字符是8个字节,那么你让字节流一次传输8个字节,那不就相当于一次传输一个字符,也就是字符流了.

呼兰县19746791811: java字节流和字符流的区别 -
侨振枸橼: 字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元.字节流默认不使用缓冲区;字符流使用缓冲区.字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元.一般使用字符流 有cache 速度快

呼兰县19746791811: Java字符流与字节流的区别 -
侨振枸橼: 字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节, 操作字节和字节数组.所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言...

呼兰县19746791811: Java中如何区分字节流和和字符流 -
侨振枸橼: 一切字符流都能用字节流去传递,对于不同的文件,如果事先能知道要传输的内容,可以通过java提供的不同流去读写,例如读字符就用DataInputStream或者BufferReader等等,如果不能确定,最好还是用字节,不过对于传递字符时候的转换过程比较麻烦,具体你可以上网查查,很多关于java io的资料

呼兰县19746791811: java中的字符流和字节流的区别,以及它们中方法的共性? -
侨振枸橼: 说道共性的话 其实字符流的本质上就是字节流~~ 字符流可以说是经过功能加强的字符流 区别也很好理解 字符流是输入输出文本的 字节流是输入输出2进制文件的 想更好的了解它们之间的关系的话(或者说整个IO之间的关系的话)你去看看装饰者设计模式 就好了

呼兰县19746791811: 在Java中,字节流和字符流的区别? -
侨振枸橼: 字节流是读取的是字节,也就是机器存储时的源码,任何软件在计算机中存储的形式都是二进制,所以说,字节可以读取任何软件,而字符只是针对某个字,而且容易出现乱码,,而字节流就不会

呼兰县19746791811: java 字节流和字符流的区别 -
侨振枸橼: 一个字节(Byte)=8bit,字符的话一个英文字符=一个字节,一个中文字符(也就是汉字)=2个字节,有一些特殊符号也会占用两个字节,字节流比字符流粒度更小

呼兰县19746791811: 字节流与字符流有什么区别 -
侨振枸橼: 字节流与字符流主要的区别是他们的的处理方式 字节流是最基本的,采用ASCII编码,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的 但实际中很多的数据是文本,又提出了字符流的概念,采用Unicode编码.它是按虚拟机的encode来处理,也就是要进行字符集的转化 这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联 你只要把java处理字节流和字符流的类搞清楚就行了!字节流 字符流 输入InputStream Reader 其它的类都是继承这四个基本类的!

呼兰县19746791811: Java中字符输入输出流与字节输入输出流的区别
侨振枸橼: 主要区别 实现上 字节输出流是继承OutputStream 而字符输出流继承OutputStreamWriter 应用上 字符流是专门用来处理文字的,包含了对多国语言的支持,而字节流主要是用来处理文字以外的如binary文件.

呼兰县19746791811: java IO中字节流与字符流有什么区别 -
侨振枸橼: 同一个文件读出来的内容当然是一样的,一次读取2个字节是指在内存中的缓冲区是这么大,开了2个字节的内存读进来一个字节的内容当然也是可以的,字符流read的时候调用的最终实现代码来自StreamDecoder,

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网