【Java原理系列】 Java ByteArrayInputStream 原理用法源码分析

IDEA 2024.1新版本踩坑记:GitLab插件强制Token登录?手把手教你禁用并恢复账号密码登录 本文详细解析了IDEA 2024.1版本中GitLab插件强制Token登录的问题,并提供了三种实用解决方案:禁用插件、降级插件版本或升级GitLab服务端。针对不同场景,帮助开发者快速恢复账号密码登录,确保开发流程顺畅。 阅读详情

Java ByteArrayInputStream 原理用法源码分析

应用场景和存在意义

ByteArrayInputStream 是 Java 中的一个输入流类,它将字节数组作为数据源。ByteArrayInputStream 的存在意义在于提供了一种将字节数组转换为输入流的方式,以便于在程序中对字节数组进行读取操作。

以下是 ByteArrayInputStream 的一些应用场景和存在意义:

  1. 内存中读取数据: ByteArrayInputStream 允许从内存中的字节数组读取数据,而无需借助磁盘或网络等外部存储设备。这在某些情况下可以提高读取速度和效率,特别是当数据已经存在于内存中时。

  2. 方便数据传输: 使用 ByteArrayInputStream,可以方便地将字节数组传递给需要输入流的方法或组件,而无需将字节数组写入磁盘或进行网络传输。这样可以简化代码,并避免不必要的数据复制和存储开销。

  3. 测试和调试: 在测试和调试过程中,可以使用 ByteArrayInputStream 来模拟输入流的行为,以便更容易对代码进行单元测试和调试。可以使用预定义的字节数组作为输入数据,并通过 ByteArrayInputStream 提供给待测试的方法。

  4. 数据解析和处理: 有时,需要对二进制数据进行解析和处理。使用 ByteArrayInputStream 可以将字节数组转换为输入流,然后使用相应的读取方法从中读取数据。这对于处理二进制协议、解析图像或音频数据等场景非常有用。

总之,ByteArrayInputStream 的存在意义在于提供了一种将字节数组转换为输入流的方式,方便在程序中对字节数组进行读取操作。它适用于内存中读取数据、方便数据传输、测试和调试以及数据解析和处理等场景。

原理

ByteArrayInputStream 是 Java 中的一个输入流实现类,它继承自 InputStream。它的原理如下:

  1. 内部缓冲区:

    • ByteArrayInputStream 使用一个字节数组作为内部缓冲区来存储数据。
    • 在创建 ByteArrayInputStream 对象时,需要将字节数组作为参数传递给它,并指定起始位置和长度。
  2. 读取操作:

    • 当调用 read() 方法时,ByteArrayInputStream 会从内部缓冲区中逐个字节地读取数据,并返回下一个可用的字节数据。
    • 如果已经读取到了数组末尾,即所有字节都已被读取,read() 方法将返回 -1,表示已达到流的末尾。
  3. 指针位置管理:

    • ByteArrayInputStream 使用一个指针来记录当前读取位置。
    • 在初始状态下,指针位于起始位置,通过每次读取一个字节后,指针向前移动一个位置。
    • 通过 mark() 和 reset() 方法,可以在某个位置设置标记并恢复到该位置,以支持重复读取或跳过部分数据。
  4. 关闭操作:

    • 当不再需要使用 ByteArrayInputStream 对象时,应该调用 close() 方法关闭流释放资源。

通过以上原理,ByteArrayInputStream 提供了从字节数组中读取数据的功能,方便快捷地读取字节数组中的数据。需要注意的是,在使用完毕后,应及时关闭流以释放资源。

用法示例

以下是 ByteArrayInputStream 在不同场景下的完整代码示例:

1. 内存中读取数据:

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ByteArrayInputStreamExample {
    public static void main(String[] args) {
        byte[] data = { 65, 66, 67, 68, 69 }; // 字节数组

        try (ByteArrayInputStream bais = new ByteArrayInputStream(data)) {
            int byteRead;
            while ((byteRead = bais.read()) != -1) {
                System.out.print((char) byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这个示例创建了一个字节数组 data,然后使用 ByteArrayInputStream 将其作为输入流进行读取。通过循环读取每个字节,并将其转换为字符输出到控制台。

2. 方便数据传输:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class ByteArrayTransferExample {
    public static void main(String[] args) {
        byte[] sourceData = "Hello, World!".getBytes(); // 源字节数组

        // 将源字节数组写入 ByteArrayOutputStream
        try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
            baos.write(sourceData);

            // 从 ByteArrayOutputStream 读取数据并存储到目标字节数组
            byte[] targetData = baos.toByteArray();

            // 使用目标字节数组创建 ByteArrayInputStream
            try (ByteArrayInputStream bais = new ByteArrayInputStream(targetData)) {
                int byteRead;
                while ((byteRead = bais.read()) != -1) {
                    System.out.print((char) byteRead);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这个示例将源字节数组写入 ByteArrayOutputStream,然后从中读取数据并存储到目标字节数组。最后,使用目标字节数组创建 ByteArrayInputStream 并进行读取操作。

3. 测试和调试:

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ByteArrayTestingExample {
    public static void processData(byte[] data) {
        try (ByteArrayInputStream bais = new ByteArrayInputStream(data)) {
            int byteRead;
            while ((byteRead = bais.read()) != -1) {
                System.out.println("Processing byte: " + byteRead);
                // 在此处进行处理逻辑...
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        byte[] testData = { 10, 20, 30, 40, 50 }; // 测试数据

        processData(testData);
    }
}

在这个示例中,processData() 方法接收一个字节数组作为参数,并使用 ByteArrayInputStream 进行读取操作。可以在处理逻辑中对每个字节进行进一步的处理或分析。在 main() 方法中,通过传递测试数据调用 processData() 方法进行测试和调试。

4. 数据解析和处理:

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class DataParsingExample {
    public static void parseData(byte[] data) {
        try (ByteArrayInputStream bais = new ByteArrayInputStream(data)) {
            byte[] buffer = new byte[4];
            int bytesRead;
            while ((bytesRead = bais.read(buffer)) != -1) {
                // 对读取到的数据进行解析和处理
                System.out.println("Parsed data: " + new String(buffer, 0, bytesRead));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        byte[] binaryData = { 65, 66, 67, 68, 69, 70, 71, 72, 73, 74 }; // 二进制数据

        parseData(binaryData);
    }
}

在这个示例中,parseData() 方法接收一个二进制数据的字节数组作为参数,并使用 ByteArrayInputStream 进行分块读取操作。可以根据实际需求对每个读取到的数据块进行解析和处理。

以上是针对不同场景下 ByteArrayInputStream 的完整代码示例,用于展示如何在Java程序中使用 ByteArrayInputStream 进行内存中数据读取、方便数据传输、测试和调试、以及数据解析和处理。

方法总结

ByteArrayInputStream 是 Java I/O 库中的一个类,它继承自 InputStream 抽象类。该类实现了一个字节数组输入流,即将一个字节数组作为输入源,并提供了相应的读取方法。

该类的主要特点和方法如下:

  • 内部缓冲区:ByteArrayInputStream 包含一个内部的字节数组缓冲区 buf,通过该缓冲区存储待读取的字节数据。
  • 索引指针:pos 表示当前待读取的字节在缓冲区中的位置。
  • 标记:mark 表示当前标记的位置,用于支持 reset() 方法。
  • 字节总数:count 表示缓冲区中有效的字节总数。

主要方法如下:

  • read():从输入流中读取下一个字节的数据。返回值是一个范围在 0 到 255 之间的整数,如果已达到流的末尾,则返回 -1。
  • read(byte[] b, int off, int len):从输入流中最多一次性读取 len 个字节,并将其写入到字节数组 b 中。返回实际读取的字节数,如果已达到流的末尾,则返回 -1。
  • skip(long n):跳过输入流中的 n 个字节。返回实际跳过的字节数。
  • available():返回当前可从输入流中读取的字节数。
  • mark(int readAheadLimit):将当前位置设置为标记位置,并指定在标记失效之前可以读取的最大字节数。
  • reset():将流重置到最后一次调用 mark 方法时的位置。
  • markSupported():测试输入流是否支持 mark 和 reset 操作。

此外,ByteArrayInputStream 还提供了构造函数用于初始化内部缓冲区和索引指针。在使用完毕后,调用 close() 方法可以关闭流,但实际上对于 ByteArrayInputStream 来说,关闭流没有任何效果。

总体而言,ByteArrayInputStream 提供了一种方便的方式来将字节数组作为输入源进行读取操作,它是一个简单、轻量级的输入流实现。

BufferedInputStream比较

ByteArrayInputStream 和 BufferedInputStream 是 Java 中两种不同的输入流实现类,它们有以下区别:

  1. 数据来源:

    • ByteArrayInputStream:从字节数组中读取数据。
    • BufferedInputStream:可以包装其他输入流,提供缓冲功能,从底层输入流中读取数据。
  2. 缓冲功能:

    • ByteArrayInputStream:没有缓冲功能,直接从字节数组中逐个字节地读取数据。
    • BufferedInputStream:提供了缓冲功能,使用内部缓冲区存储从底层输入流读取的数据,减少实际的 I/O 操作次数。
  3. 读取方式:

    • ByteArrayInputStream:支持逐个字节或批量读取字节数组。
    • BufferedInputStream:支持逐个字节或批量读取字节数组。
  4. 性能影响:

    • ByteArrayInputStream:由于直接读取字节数组,无需进行额外的 I/O 操作,所以性能较高。
    • BufferedInputStream:通过使用内部缓冲区减少实际的 I/O 操作次数,可以提高读取性能。

根据需要选择适合的输入流类。如果已经有一个字节数组并且需要从中读取数据,可以选择使用 ByteArrayInputStream。如果需要对其他输入流进行缓冲以提高读取性能,可以选择使用 BufferedInputStream。

中文源码

/**
 * ByteArrayInputStream 是一个包含内部缓冲区的输入流,缓冲区中包含可以从流中读取的字节。
 * 一个内部计数器跟踪下一个由 read 方法提供的字节。
 * <p>
 * 关闭 ByteArrayInputStream 没有任何效果。在流关闭后,仍然可以调用该类的方法而不会生成 IOException。
 *
 * @author Arthur van Hoff
 * @see java.io.StringBufferInputStream
 * @since JDK1.0
 */
public class ByteArrayInputStream extends InputStream {

    /**
     * 由流的创建者提供的字节数组。buf[0] 到 buf[count-1] 是唯一可从流中读取的字节;
     * buf[pos] 是将要读取的下一个字节。
     */
    protected byte buf[];

    /**
     * 从输入流缓冲区读取的下一个字符的索引。
     * 此值应始终为非负数且不大于 count 的值。
     * 从输入流缓冲区读取的下一个字节是 buf[pos]。
     */
    protected int pos;

    /**
     * 流中当前标记的位置。
     * ByteArrayInputStream 对象在构造时默认标记为零位置。
     * 它们可以通过 mark() 方法在缓冲区中的另一个位置进行标记。
     * reset() 方法将当前缓冲区位置设置为此点。
     * <p>
     * 如果没有设置标记,则 mark 的值是构造函数传递的偏移量(如果未提供偏移量,则为 0)。
     *
     * @since JDK1.1
     */
    protected int mark = 0;

    /**
     * 输入流缓冲区中最后一个有效字符的索引加一。
     * 此值应始终为非负数且不大于 buf 的长度。
     * 它是可从输入流缓冲区中读取的最后一个字节之后的位置。
     */
    protected int count;

    /**
     * 创建 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
     * 缓冲区数组不会被复制。
     * pos 的初始值为 0,count 的初始值为 buf 的长度。
     *
     * @param buf 输入缓冲区。
     */
    public ByteArrayInputStream(byte buf[]) {
        this.buf = buf;
        this.pos = 0;
        this.count = buf.length;
    }

    /**
     * 创建 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
     * pos 的初始值为 offset,count 的初始值为 offset+length 和 buf.length 的较小值。
     * 缓冲区数组不会被复制。缓冲区的标记设置为指定的偏移量。
     *
     * @param buf     输入缓冲区。
     * @param offset  要读取的第一个字节在缓冲区中的偏移量。
     * @param length  从缓冲区中读取的最大字节数。
     */
    public ByteArrayInputStream(byte buf[], int offset, int length) {
        this.buf = buf;
        this.pos = offset;
        this.count = Math.min(offset + length, buf.length);
        this.mark = offset;
    }

    /**
     * 从输入流中读取下一个字节的数据。将字节的值作为范围在 0 到 255 之间的 int 值返回。
     * 如果没有可用的字节(因为已达到流的末尾),则返回 -1。
     * <p>
     * 此 read 方法不会阻塞。
     *
     * @return 下一个字节的数据,如果已达到流的末尾,则返回 -1。
     */
    public synchronized int read() {
        return (pos < count) ? (buf[pos++] & 0xff) : -1;
    }

    /**
     * 从输入流中最多一次性读取 len 个字节,并将其读入字节数组 b 中。
     * 如果 pos 等于 count,则返回 -1,表示已达到文件末尾。
     * 否则,读取的字节数 k 等于 len 和 count-pos 的较小值。
     * 如果 k 是正数,则将字节 buf[pos] 到 buf[pos+k-1] 复制到 b[off] 到 b[off+k-1],
     * 这相当于使用 System.arraycopy 执行的操作。
     * 将 k 添加到 pos,并返回 k。
     * <p>
     * 此 read 方法不会阻塞。
     *
     * @param b   存储读取数据的缓冲区。
     * @param off 目标数组中的起始偏移量。
     * @param len 最多读取的字节数。
     * @return 实际读取到缓冲区中的总字节数,如果没有更多数据则返回 -1。
     * @throws NullPointerException 如果 b 为 null。
     * @throws IndexOutOfBoundsException 如果 off 为负数,len 为负数,或 len 大于 b.length - off。
     */
    public synchronized int read(byte b[], int off, int len) {
        if (b == null) {
            throw new NullPointerException();
        } else if (off < 0 || len < 0 || len > b.length - off) {
            throw new IndexOutOfBoundsException();
        }

        if (pos >= count) {
            return -1;
        }

        int avail = count - pos;
        if (len > avail) {
            len = avail;
        }
        if (len <= 0) {
            return 0;
        }
        System.arraycopy(buf, pos, b, off, len);
        pos += len;
        return len;
    }

    /**
     * 跳过输入流中的 n 个字节。如果到达了输入流的末尾,则跳过的字节数可能较少。
     * 实际跳过的字节数 k 等于 n 和 count-pos 的较小值。
     * 将 k 添加到 pos,并返回 k。
     *
     * @param n 要跳过的字节数。
     * @return 实际跳过的字节数。
     */
    public synchronized long skip(long n) {
        long k = count - pos;
        if (n < k) {
            k = n < 0 ? 0 : n;
        }

        pos += k;
        return k;
    }

    /**
     * 返回可以从输入流中读取(或跳过)的剩余字节数。
     * <p>
     * 返回的值是 count - pos,即从输入缓冲区中读取而不阻塞的剩余字节数。
     *
     * @return 可从输入流中读取(或跳过)的剩余字节数。
     */
    public synchronized int available() {
        return count - pos;
    }

    /**
     * 测试此 InputStream 是否支持 mark/reset 操作。
     * ByteArrayInputStream 的 markSupported 方法始终返回 true。
     *
     * @since JDK1.1
     */
    public boolean markSupported() {
        return true;
    }

    /**
     * 设置流的当前标记位置。
     * ByteArrayInputStream 对象在构造时默认标记为零位置。
     * 它们可以通过此方法在缓冲区的其他位置进行标记。
     * <p>
     * 如果没有设置标记,则 mark 的值是构造函数传递的偏移量(如果未提供偏移量,则为 0)。
     *
     * @since JDK1.1
     */
    public void mark(int readAheadLimit) {
        mark = pos;
    }

    /**
     * 将缓冲区重置为标记位置。除非另一个位置被标记或者在构造函数中指定了偏移量,否则标记位置为 0。
     */
    public synchronized void reset() {
        pos = mark;
    }

    /**
     * 关闭 ByteArrayInputStream 没有任何效果。
     * 在流关闭后,仍然可以调用该类的方法而不会生成 IOException。
     */
    public void close() throws IOException {
    }

}
gmsv源代码c语言,石器时代ABLua的原理、简介、过程、运用、收发 操作原理(一)服务端:服务器源文件客户端:客户所操作的程序(既是游戏客户端)接口:既是某项功能(例如:鼠标点击,文字发送,战斗,观战,人物动作等)返回的值ABlua:在源代码中添加的整套引擎作为回调接口--lua所实现的功能是基于服务端源码添加的接口由该接口与客户端发送封包实现功能源码里是否有ABlua回调接口?例如:源码里的gmsv/battle.c文件(既是战斗回调文件)以下为简单描述C给予l... 阅读详情

相关推荐

Delta机器人:运动学正反解分析

Delta机器人:运动学正反解分析 一、Delta机构简介 Delta机构是并联机构中的一种典型机构,起原始结构如图1所示。Delta机构由R.Clavel 博士在 1985年发明,是现在并联机器人中使用最多的一种,具备了并联机构所特有的优点,负载能力强、效率高、末端执行器精度高、运动惯性小,可以高速稳定运动等。因此在机器人领域获得了越来越广泛的应用。以实现高速、精准、高效的运动。           &n

花洛兮灬 3万+

Java自学日记之IO流(四):字节数组流(ByteArrayInputStream、ByteArrayOutputStream)

系列文章目录 Java自学日记之IO流(一):字节流和字符流 Java自学日记之IO流(二):转换流(InputStreamReader、OutputStreamWriter) Java自学日记之IO流(三):缓冲流(BufferedInputStream、BufferedOutputStream) 文章目录系列文章目录前言一、字节数组流介绍1.字节数组流作用2.ByteArrayInputStream介绍3.ByteArrayOutputStream介绍二、构造方法1.ByteArrayInputStr

qq_51738873的博客 1万+

【实战】ESP32 + LN298N 实现电动推杆的闭环位置伺服控制

本文详细介绍了如何使用ESP32微控制器和LN298N电机驱动模块,为普通电动推杆增加编码器反馈,实现精准的闭环位置伺服控制。文章从硬件选型与接线讲起,深入解析了编码器四倍频计数原理与位置换算,并重点阐述了PID控制算法的核心思想、代码实现及参数整定方法,旨在帮助读者从零构建一个反应迅速、定位精准的智能执行器系统。

weixin_29195615的博客 317

JAVA中的ByteArrayInputStream

Java中的ByteArrayInputStream类是一个字节数组输入流,它允许我们以字节的形式读取字节数组。作用:创建一个ByteArrayInputStream对象,使用buf作为其缓冲区数组,并从offset位置开始读取length个字节。参数:buf为字节数组,offset为缓冲区数组的初始位置,length为从初始位置开始读取的字节数。作用:从输入流中读取最多len个字节的数据到字节数组b中,从off位置开始存储。返回值:返回读取的字节,如果已到达流末尾,则返回-1。返回值:剩余的字节数。

qa3629723的博客 5418

硬件-汽车电子-TBOX/TCAM核心器件选型与系统集成设计指南

本文深入解析汽车电子TBOX/TCAM硬件架构与系统集成设计,涵盖核心器件选型、电源管理、信号完整性优化等关键点。重点分享5G模组选型避坑经验、MCU隐性指标及热设计验证方案,为车载通信系统开发提供实用指南。

weixin_30352645的博客 530

Microsoft Defender防病毒扫描添加排除项

Win10与Win11上的“**Microsoft Defender防病毒**”功能默认会自动扫描所有非压缩文件,如果发现病毒或疑似病毒甚至经过手动修改后某些安装文件,会自动将其删除,如果是后面两种情况,则可能会造成误报,对我们正常办公或学习造成不利影响。 此时, 我们可以将某个目录或文件设置为“**Microsoft Defender防病毒不会扫描已排除的项目**”(<red>但要注意:这些被排除的目录或文件会给笔记本造成一定的安全风险,如果真有病毒感染这些目录或文件它们也不会被“**Micr

weixin_42148668的博客 6481

ByteArrayInputStream

asd

qq_37593817的博客 4478

大模型越狱指令数据集全解析:从AdvBench到HarmBench

本文全面解析了AdvBench、HarmBench等主流大模型越狱指令数据集。AdvBench作为基础测试集,用于快速评估模型安全基线;HarmBench则以其全面的文本、多模态及对抗性攻击评估,成为当前权威的深度安全审计工具。文章还介绍了MaliciousInstruct、JailbreakBench等特色数据集,并提供了根据实际场景选择与使用这些数据集的具体实战指南。

weixin_29327525的博客 616

Java字节流:ByteArrayInputStream ByteArrayOutputStream

----------------------------------------------------------------------------------- ByteArrayInputStream 类声明:public class ByteArrayInputStream extends InputStream位于java.io包下官方对其说明:  A ByteArra...

dianzhenluo3164的博客 5205

Unreal5 从入门到精通之 如何实现 离线语音识别

本文介绍了如何使用离线语音识别插件 Offline Speech Recognition 进行本地语音转文本处理。该插件支持离线运行,用户可以通过下载并运行语言服务器(如 Vosk)来处理语音数据。文章详细说明了如何设置语言服务器、下载语言模型,并在虚幻引擎(UE)项目中配置麦克风和语音捕获。此外,还介绍了如何将 SoundWave 作为输入,以及如何通过节点将语音数据发送到语言服务器进行处理。最后,提供了相关文档链接以供进一步参考。

TxNet 904

EtherCAT主站SOEM -- 15 -- CIA402伺服驱动器子协议

以上就是EtherCAT主站SOEM – 15 – CIA402伺服驱动器子协议的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 2732

java IO笔记(ByteArrayInputStream/ByteArrayOutputStream)

今天讲的是ByteArrayInputStream流和ByteArrayOutputStream流。 首先让我们来看看ByteArrayOutputStream的源码: ByteArrayOutputStream.java package java.io; import java.util.Arrays; public class ByteArrayOutputStream extend

moonfish0607的博客 3269

龙虾机器人(OpenClaw)本地部署完全技术指南

在开始部署之前,我们需要明确部署的对象。通常所说的“龙虾机器人”指的是开源项目 OpenClaw(曾用名:Clawdbot、Moltbot)。它由程序员彼得·斯坦伯格开发,是一个开源的、可本地部署的通用型AI代理系统。与ChatGPT等对话式AI不同,OpenClaw被赋予了操作系统的权限:它可以执行终端命令、读写文件、操控浏览器、安装软件,甚至通过MCP协议调用外部工具。

huanghm88的专栏 2万+

ByteArrayInputStream类

一、说明 哈哈,这是学习Java之路的第一篇博文。虽然说接触学习Java有一段时间了,但是对流的概念一直并不是很清楚。也看了很多资料,但是感觉还是非常的抽象很难去理解。但是流又是Java中很重要的一部分,所以就决定花点时间好好弄一下。这篇文章也并非全部是我的原创文章,我浏览了写的比较好的博客,将其修改添加,加上一些自己的看法,就当成自己学习的笔记。仅供学习参考。参考原文链接 二、Byte...

weixin_30807779的博客 529

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java IO源码分析(二)——ByteArrayInputStream 和 ByteArrayOutputStream

简介 ByteArrayInputStream 是字节数组输入流,它继承于InputStream。 它的内部数据存储结构就是字节数组。 ByteArrayOutputStream是字节数组输出流,它继承于OutputStream。 它的内部数据存储结构也是字节数组。 源码分析 InputStream 在分析ByteArrayInputStream之前,应该先看InputStream,父类InputStream是ByteArrayInputStream的父类,主要实现了读取和跳跃的方法。 public abs

Think Different. 333

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

12、ByteArrayInputStream和DataInputStream的源码分析和使用方法详细分析

Of1CYCaaJ的博客 245

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ByteArrayInputStream源码分析

转自: ByteArrayInputStream 是字节数组输入流。它继承于InputStream。 它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的。 我们都知道,InputStream通过read()向外提供接口,供它们来读取字节数据;而ByteArrayInputStre

asivy的专栏 807

ByteArrayInputStream和ByteArrayOutputStream

1.ByteArrayInputStream和ByteArrayOutputStream简介 ByteArrayInputStream是字节数组输入流,继承InputStream,它里面维护一个缓冲区,也就是一个byte类型的数组,通过一个计数器pos来实现对字节数组的读取。与之相对应的ByteArrayOutputStream是字节数组输出流,继承自OutputStream,它里面也维护一个缓冲...

Solar24的博客 1577

java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)

摘要 : 介绍了 InputStream超类中的定义方法和ByteArrayInputStream的源码解析(基于JDK 1.7)。最后同个小示例表达其大致的用法

guyuelin123的博客 430

java基本I/O系列--ByteArrayInputStream 介绍

转载自:http://www.cnblogs.com/skywang12345/p/io_01.html FYI ByteArrayInputStream 是字节数组输入流。它继承于InputStream。 它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的。 我们都知道,In

one-programmer 1198

(每日持续更新)jdk api之ByteArrayInputStream基础、应用、实战

int read()从输入流中读取下一个字节的数据。如果已经到达流的末尾,返回 -1。从输入流中最多读取len个字节的数据到字节数组b中,从偏移量off开始存储。返回实际读取的字节数,如果已经到达流的末尾,返回 -1。跳过输入流中的n个字节。返回实际跳过的字节数。返回剩余可读取的字节数。在当前流位置设置标记,最多允许跳过readlimit个字节。将流的位置重置到最后一次调用mark方法设置的位置。判断此流是否支持mark和reset操作。

a89879193的专栏 1207

ByteArrayInputStream和DataInputStream的源码分析和使用方法详细分析

⑤、step5: 从ByteArrayInputStream指向的内存数组中读取5个字节到byte[] buf数组的[0,5)索引位置。④、step4: 跳过5个字节。b、 mark()函数与reset()函数是配套的,reset()函数会将ByteArrayInputStream中右指针int pos指向的索引重置为mark()函数中左指针int mark指向的索引。a、 ByteArrayInputStream中的mark(0)函数中的“入参0”是没有实际意义的;mark(0)函数需要注意以下2点。

vSX5Z1Zsa的博客 195

java(jdk1.7) IO系列02之ByteArrayInputStream和ByteArrayOutputStream解析

1.ByteArrayInputStream和ByteArrayOutputStream简介 ByteArrayInputStream是字节数组输入流,继承InputStream,它里面维护一个缓冲区,也就是一个byte类型的数组,通过一个计数器pos来实现对字节数组的读取。与之相对应的ByteArrayOutputStream是字节数组输出流,继承自OutputStream,它里面也维护一个...

weixin_30568715的博客 204

Java I/O系列(二)ByteArrayInputStream与ByteArrayOutputStream源码分析及理解

1. ByteArrayInputStream 定义 继承了InputStream,数据源是内置的byte数组buf,那read ()方法的使命(读取一个个字节出来),在ByteArrayInputStream就是简单的通过定向的取buf元素实现的 核心源码理解 源码: 1 public ByteArrayInputStream(byte buf[], in...

weixin_30606461的博客 163

Java InputStream 浅析

Java InputStream 类体系,经典装饰者模式解析

一步一步往上爬 2376
上一篇: 【Java原理系列】 AtomicInteger原理用法源码详解
下一篇: 【spark原理系列】SparkUserDefinedFunction原理用法示例源码分析
BigDataMLApplication
博客等级 码龄11年 7363粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值