学编程 ❀(๑╯◡╰๑)❀ 就上soxunxi.cn!这里有CMS,CSS,NET,PHP,Linux,HTML,JAVA,MySQL,Python等教程.
当前位置: JAVA > java字符流与字撙节的区分是什么【JAVA教程】,java,字符流,字节流

java中字符流与字撙节的区分:(引荐:java视频教程)

1、字撙节操纵的基础单元为字节;字符流操纵的基础单元为Unicode码元。

2、字撙节默许不运用缓冲区;字符流运用缓冲区。

3、字撙节一般用于处置惩罚二进制数据,实际上它可以处置惩罚恣意范例的数据,但它不支撑直接写入或读取Unicode码元;字符流畅常处置惩罚文本数据,它支撑写入及读取Unicode码元。

字撙节

Java中的字撙节处置惩罚的最基础单元为单个字节,它一般用来处置惩罚二进制数据。Java中最基础的两个字撙节类是InputStream和OutputStream,它们离别代表了组基础的输入字撙节和输出字撙节。

InputStream类与OutputStream类均为笼统类,我们在实际运用中一般运用Java类库中供应的它们的一系列子类。下面我们以InputStream类为例,来引见下Java中的字撙节。

InputStream类中定义了一个基础的用于从字撙节中读取字节的要领read,这个要领的定义以下:

public abstract int read() throws IOException;

这是一个笼统要领,也就是说任何派生自InputStream的输入字撙节类都须要完成这一要领,这一要领的功用是从字撙节中读取一个字节,若到了末端则返回-1,不然返回读入的字节。

关于这个要领我们须要注重的是,它会一向壅塞晓得返回一个读取到的字节或是-1。别的,字撙节在默许情况下是不支撑缓存的,这意味着每挪用一次read要领都邑要求操纵系统来读取一个字节,这往往会伴随着一次磁盘IO,因而效力会比较低。

有的小伙伴大概以为InputStream类中read的以字节数组为参数的重载要领,可以一次读入多个字节而不必频仍的举行磁盘IO。那末终究是否是如许呢?我们来看一下这个要领的源码:

public int read(byte b[]) throws IOException {
    return read(b, 0, b.length);
}

它挪用了另一个版本的read重载要领,那我们就接着往下追:

public int read(byte b[], int off, int len) throws IOException {
        if (b == null) {
            throw new NullPointerException();
        } else if (off < 0 || len < 0 || len > b.length - off) {
            throw new IndexOutOfBoundsException();
        } else if (len == 0) {
            return 0;
        }

        int c = read();
        if (c == -1) {
            return -1;
        }
        b[off] = (byte)c;

        int i = 1;
        try {
            for (; i < len ; i++) {
                c = read();
                if (c == -1) {
                    break;
                }
                b[off + i] = (byte)c;
            }
        } catch (IOException ee) {
        }
        return i;
    }

从以上的代码我们可以看到,实际上read(byte[])要领内部也是经由历程轮回挪用read()要领来完成“一次”读入一个字节数组的,因而实质来讲这个要领也未运用内存缓冲区。要运用内存缓冲区以进步读取的效力,我们应当运用BufferedInputStream。

字符流

Java中的字符流处置惩罚的最基础的单元是Unicode码元(大小2字节),它一般用来处置惩罚文本数据。所谓Unicode码元,也就是一个Unicode代码单元,局限是0x0000~0xFFFF。在以上局限内的每一个数字都与一个字符相对应,Java中的String范例默许就把字符以Unicode划定规矩编码然后存储在内存中。

然而与存储在内存中差别,存储在磁盘上的数据一般有着林林总总的编码体式格局。运用差别的编码体式格局,雷同的字符会有差别的二进制示意。实际上字符流是如许事情的:

输出字符流:把要写入文件的字符序列(实际上是Unicode码元序列)转为指定编码体式格局下的字节序列,然后再写入到文件中;

输入字符流:把要读取的字节序列按指定编码体式格局解码为响应字符序列(实际上是Unicode码元序列从)从而可以存在内存中。

我们经由历程一个demo来加深对这一历程的明白,示例代码以下:

import java.io.FileWriter;
import java.io.IOException;


public class FileWriterDemo {
    public static void main(String[] args) {
        FileWriter fileWriter = null;
        try {
            try {
                fileWriter = new FileWriter("demo.txt");
                fileWriter.write("demo");
            } finally {
                fileWriter.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

更多java学问请关注java基础教程栏目。

以上就是java字符流与字撙节的区分是什么的细致内容,更多请关注ki4网别的相干文章!

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

分享到:
赞(0) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

上一篇:

下一篇:

相关推荐

0 条评论关于"java字符流与字撙节的区分是什么【JAVA教程】,java,字符流,字节流"

最新评论

    暂无留言哦~~

博客简介

看古风美女插画Cos小姐姐,素材合集图集打包下载:炫龙网,好看二次元插画应有尽有,唯美小姐姐等你来。

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

服务热线:
 

 QQ在线交流

 旺旺在线