`

InputStream中read()与read(byte[] b)方法的区别

JDK 
阅读更多

 

这两个方法在抽象类InputStream中都是作为抽象方法存在的,JDK API中是这样描述两者的:

read() :  从输入流中读取数据的下一个字节,返回0255范围内的int字节值。如果因为已经到达流末尾而没有可用的字节,则返回-1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。

read(byte[] b) :  从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。在不指定读取的起始点时,默认从流中读取b.length长度的字节值到字节数组中去,完全覆盖字节数组,当然前提是该流长度大于或者等于字节数组,如果小于字节数组就只写入流长度的字节。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。

如果 b 的长度为 0,则不读取任何字节并返回 0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少读取一个字节并将其存储在 b中。

将读取的第一个字节存储在元素 b[0] 中,下一个存储在 b[1] 中,依次类推。读取的字节数最多等于 b 的长度。设 k 为实际读取的字节数;这些字节将存储在 b[0]  b[k-1] 的元素中,不影响 b[k b[b.length-1] 的元素。

由帮助文档中的解释可知,read()方法每次只能读取一个字节,所以也只能读取由ASCII码范围内的一些字符。这些字符主要用于显示现代英语和其他西欧语言。而对于汉字等unicode中的字符则不能正常读取。只能以乱码的形式显示。

对于read()方法的上述缺点,在read(byte[] b)中则得到了解决,就拿汉字来举例,一个汉字占有两个字节,则可以把参数数组b定义为大小为2的数组即可正常读取汉字了。当然b也可以定义为更大,比如如果b=new byte[4]的话,则每次可以读取两个汉字字符了,但是需要注意的是,如果此处定义的大小为37等奇数,则对于全是汉字的一篇文档则不能全部正常读写了。

 

下面用实例来演示一下二者的用法:

实例说明:类InputStreamTest.java 来演示read()方法的使用。类InputStreamTest1.java来演示read(byte[] b)的使用。两个类的主要任务都是通过文件输入流FileInputStream来读取文本文档yhw.txt中的内容,并且输出到控制台上显示。

     先看一下yhw.txt文档的内容:

 

 
 

InputStreamTest.java代码如下:

 


 

运行结果:3.1415926 No pains,No gains!!(乱码乱码)

 

InputStreamTest1.java代码如下:


 

运行结果:

3.1415926 No pains,No gains!! 最是那一低头的温柔,像一朵水莲花不胜凉风的娇羞。


 

 

分享到:
评论

相关推荐

    Blob、InputStream、byte 互转

    该函数创建了一个`ByteArrayOutputStream`对象,然后逐个读取`InputStream`中的字节并写入`ByteArrayOutputStream`中,最后转换为`byte[]`数组。 2. **byte[]转InputStream** ```java public InputStream ...

    读取图片数据到byte[]数组,合并inputStream每次读取产生的缓冲byte[]

    在实际应用中,`InputStream`的多次读取可能涉及到`BufferedInputStream`的`read()`方法,它每次会读取一定大小的缓冲区。为了合并这些缓冲,我们需要维护一个`List<byte[]>`来存储每次读取的结果,然后在所有数据...

    JAVA语言中read方法分析

    当需要一次性读取多个字节并将它们存储到数组中时,则可以选择`read(byte[] b)`或`read(byte[] b, int off, int len)`。 #### 三、案例分析 假设我们要编写一个程序,该程序需要通过键盘接收两个整数,然后找出这...

    Java中InputStream类.pdf

    - `public int read(byte[] b, int off, int len) throws IOException`: 类似于上一个方法,但可以指定在数组`b`的哪个偏移量`off`开始存储,以及最多读取`len`个字节。 - `public void reset() throws IOException`...

    springboot 解决InputStream只能读取一次的问题

    在自定义的`ServletInputStream`中实现`isReady()`、`setReadListener(ReadListener)`等相关方法以保持兼容性。 最后,为了在Spring Boot中使用这个自定义的`HttpServletRequestWrapper`,我们需要在适当的拦截器或...

    java InputStream读取数据问题

    在Java编程中,`InputStream`是Java I/O流的基础类,用于从各种输入源读取数据。...对于压缩包中的`socketTest`文件,可能是用于测试网络数据传输的Socket编程示例,与`InputStream`在处理网络数据流时的应用紧密相关。

    InputStream与OutputStream及File间互转

    下面我们将详细探讨`InputStream`、`OutputStream`以及它们与`File`之间的转换方法。 1. `InputStream`与`File`的转换: 当我们需要从文件中读取数据时,可以使用`FileInputStream`类,它是`InputStream`的一个...

    IO流文档InputStream / OutputStream

    InputStream是所有输入流的抽象超类,它提供了基本的读取方法,如read()、read(byte[] b)等。InputStream有多种实现类,如FileInputStream、PipedInputStream、FilterInputStream等,每种实现类都有其特定的读取方式...

    将输出流OutputStream转化为输入流InputStream的方法

    在Java编程中,有时我们可能需要将一个已经写入数据的`OutputStream`转换为`InputStream`,以便重新读取这些数据。这种情况通常出现在临时存储或处理数据时,例如在网络传输或者存储到内存中的场景。本篇文章将深入...

    Java String与Byte类型转换

    在Java编程中,String对象和Byte...总之,Java中的String与Byte类型的转换是编程中不可或缺的部分,尤其在网络编程中,理解这两种类型之间的转换方式及其在网络数据交换中的作用,对于编写高效、可靠的程序至关重要。

    Java中的字节流文件读取教程(一)

    InputStream中还有其他几个方法,如read(byte b[])、read(byte b[], int off, int len)、skip(long n)、close()、mark(int readlimit)、reset()、markSupported()等。这些方法都是用于读取文件的字节流, skip方法...

    解析Java的InputStream类并借助其读取ppt文件

    3. `InputStream.read(byte[] b)`与`InputStream.read(byte[] b, int off, int len)`: 这两个方法用于读取多个字节。`read(byte[] b)`尝试读取`b.length`个字节到字节数组`b`中,但不保证一定能读取这么多,可能只...

    Java实现inputstream流的复制代码实例

    * `read(byte[] b)`:读取多个字节到字节数组中 * `close()`:关闭输入流 InputStream 的限制 InputStream 对象有一个限制:它只能读取一次。也就是说,一旦读取了 InputStream 对象,它就不能再次读取。这是因为 ...

    通过jsoup,输入流InputStream爬取图片PaQuPic.rar,有意者入

    **JSoup库与Java爬虫基础** JSoup是一款强大的Java库,专为处理HTML文档而设计。它提供了方便的API,使得我们能够解析、提取和修改HTML内容,这对于网络爬虫开发尤其有用。在本教程中,我们将探讨如何利用JSoup结合...

    Java中几个文件输入流和文件输出流的研究.pdf

    4. 读取方法:public int read(byte[] b) throws IOException:从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 5. 关闭方法:public void close() throws IOException:关闭此文件输入流并释放与...

    Java InputStream的多种使用详解

    在上面的代码中,我们首先打开了一个文件输入流,然后使用 read 方法读取数据,并将其存储在 byte 数组中。最后,我们关闭了输入流,以释放系统资源。 二、FileInputStream 的使用 FileInputStream 是 InputStream...

    java 中InputStream,String,File之间的相互转化对比

    总结来说,Java中InputStream、String和File的相互转化是编程中常见的操作,理解并掌握这些转换方法对于提升开发效率和代码质量至关重要。在进行转换时,要结合具体场景,选择合适的方法,同时注意性能优化和资源...

    2021-2022年收藏的精品资料软件工程师浅谈Java的输入输出流技术步骤说明.docx

    InputStream类提供了读取字节的基本方法,如read(),read(byte[] b)和read(byte[] b, int off, int len),而OutputStream类则提供了写入字节的方法,如write(int b),write(byte[] b)和write(byte[] b, int off, int...

    Java 类型相互转换byte[]类型,Blob类型详细介绍

    在Java编程中,数据存储和传输常常涉及到不同类型的数据转换,特别是在数据库操作中,与二进制大数据相关的类型如`byte[]`(字节数组)和`Blob`(Binary Large Object)之间的转换尤为常见。本篇文章将详细讲解如何...

    Java中的字节流.

    - `public int read(byte[] b) throws IOException`:从流中读取一系列字节到byte数组`b`中。返回实际读取的字节数,如果流已结束则返回-1。 - `public void read(byte[] b, int off, int len) throws IOException...

Global site tag (gtag.js) - Google Analytics