java 中,如何从InputStream 读取字节数组呢?
方式一:
/*** * Has been tested * * @param in * @return * @throws IOException */ public static byte[] readBytes(InputStream in) throws IOException { byte[] temp = new byte[in.available()]; byte[] result = new byte[0]; int size = 0; while ((size = in.read(temp)) != -1) { byte[] readBytes = new byte[size]; System.arraycopy(temp, 0, readBytes, 0, size); result = SystemUtil.mergeArray(result,readBytes); } return result; }
方式二:
public static byte[] readBytes3(InputStream in) throws IOException { BufferedInputStream bufin = new BufferedInputStream(in); int buffSize = BUFFSIZE_1024; ByteArrayOutputStream out = new ByteArrayOutputStream(buffSize); // System.out.println("Available bytes:" + in.available()); byte[] temp = new byte[buffSize]; int size = 0; while ((size = bufin.read(temp)) != -1) { out.write(temp, 0, size); } bufin.close(); byte[] content = out.toByteArray(); return content; }
依赖的函数:
/*** * 合并字节数组 * @param a * @return */ public static byte[] mergeArray(byte[]... a) { // 合并完之后数组的总长度 int index = 0; int sum = 0; for (int i = 0; i < a.length; i++) { sum = sum + a[i].length; } byte[] result = new byte[sum]; for (int i = 0; i < a.length; i++) { int lengthOne = a[i].length; if(lengthOne==0){ continue; } // 拷贝数组 System.arraycopy(a[i], 0, result, index, lengthOne); index = index + lengthOne; } return result; }
相关推荐
//从输入流中获取数据并以字节数组返回public class StreamTool { /** * 从输入流获取数据 * @param inputStream * @return * @throws Exception */ public static byte[] readInputStream(InputStream ...
2. **读取字节**:调用InputStream的read()方法,将图片文件的每个字节读取到一个字节数组中。 3. **处理字节数组**:读取到的字节数组就是图片的二进制表示,可以根据需要进行传输或存储。 4. **关闭流**:在完成...
- **Java 从 InputStream 获取字节数组**:这部分介绍了如何从 InputStream 中读取数据并转换为字节数组。 - **Java 获取 request 请求要素**:这部分内容介绍了 Servlet 中如何通过 HttpServletRequest 对象获取...
ByteArrayInputStream是InputStream的子类,它允许我们将字节数组当作输入流来读取。内部有一个字节数组和一个位置计数器,用于跟踪当前读取的位置。创建一个ByteArrayInputStream时,需要提供一个字节数组作为其...
使用`FileInputStream`类读取图片文件,然后将其内容转换为字节数组。以下是一个简单的示例: ```java File imageFile = new File("1.jpg"); FileInputStream fis = new FileInputStream(imageFile); byte[] ...
3. 使用 ByteArrayInputStream 将字节数组转换回 InputStream 对象。 示例代码 下面是克隆 InputStream 对象的示例代码: ```java public class StreamOperateUtil { public static void main(String[] args) ...
2. **`ByteArrayInputStream`**:从内存中的字节数组读取数据,适用于需要将字节数组作为输入源的场景。 3. **`StringBufferInputStream`**:从`StringBuffer`对象读取数据,尽管`StringBufferInputStream`已过时...
- `public int read(byte[] b) throws IOException`: 读取多个字节,存入字节数组`b`中,返回实际读取的字节数。 - `public int read(byte[] b, int off, int len) throws IOException`: 类似于上一个方法,但可以...
在Java编程语言中,字节数组(byte[])是一种基本的数据结构,广泛用于处理二进制数据,如文件读写、网络传输等场景。然而,由于字节数组是可变的,直接操作可能会引发线程安全问题。为了解决这个问题,“Bytes”库...
* int read(byte[] b):从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。 * int read(byte[] b, int off, int len):将输入流中最多len个数据字节读入byte数组。 * void reset():将此流重新定位到最后一...
本文将详细介绍如何使用Java中的字节流技术来实现从文件中按字节读取信息,并将其转换为字节数组。 #### Java中的字节流简介 Java提供了一套强大的流处理机制,使得开发者能够方便地进行数据的读写操作。字节流是...
ByteArrayInputStream是InputStream的一个子类,它允许我们从字节数组中读取数据。在Java编程中,我们经常会遇到需要将字节数组转换为输入流的情况,这时ByteArrayInputStream就派上了用场。它的构造函数接受一个...
- **`public void write(byte[] b, int off, int len)`**:向输出流写入字节数组b中从下标off开始的len个字节。 - **`public void flush()`**:刷新输出流,强制写出所有缓冲的输出字节。 ##### 3. 字符流 字符流...
- `public void write(byte[] b, int off, int len) throws IOException`:将`len`个字节从指定的byte数组写入此输出流,从索引`off`处开始读取。 - **其他常用方法**: - `public void flush() throws ...
通过available()方法获取文件的大小,然后一次性读取整个文件内容到字节数组,并写入新文件。 过滤流(FilterInputStream 和 FilterOutputStream)是字节流的扩展,允许在数据传输过程中进行特定的转换或处理。这两...
`ByteArrayOutputStream`允许我们将数据写入一个字节数组,而`ByteArrayInputStream`可以从该字节数组中读取数据。 以下是一个简单的代码示例,展示如何将`OutputStream`转换为`InputStream`: ```java import ...
例如,可以创建FileInputStream实例读取文件,然后通过循环调用read()方法将文件内容读入字节数组,再使用FileOutputStream写入到另一个文件。 - 数据在网络间的传输:Socket编程中,Socket的getInputStream()和...
这个程序首先从网络上下载图片,将其转换为字节数组,然后将这些字节编码为Base64字符串。在实际应用中,这个字符串可以直接嵌入到HTML中显示图片,也可以存储在数据库中供后续使用。 注意,`ReaderPicture`这个...
- **ByteArrayInputStream** 和 **ByteArrayOutputStream**:用于在内存中操作字节数组。 - **BufferedInputStream** 和 **BufferedOutputStream**:增加了缓冲机制,提高了读写效率。 - **DataInputStream** 和 **...