java 中如何从InputStream中读取指定长度的字节呢?
代码如下:
/*** * 从输入流获取字节数组,当文件很大时,报java.lang.OutOfMemoryError: Java heap space * * @since 2014-02-19 * @param br_right * @param length2 * @return * @throws IOException */ public static byte[] readBytesFromInputStream(InputStream br_right, int length2) throws IOException { int readSize; byte[] bytes = null; bytes = new byte[length2]; long length_tmp = length2; long index = 0;// start from zero while ((readSize = br_right.read(bytes, (int) index, (int) length_tmp)) != -1) { length_tmp -= readSize; if (length_tmp == 0) { break; } index = index + readSize; } return bytes; } /*** * 读取指定长度的字节 * @since 2014-02-27 * @param ins * @param sumLeng : 要读取的字节数 * @return * @throws IOException */ public static byte[]readBytesFromGzipInputStream(GZIPInputStream ins,long sumLeng) throws IOException{ byte[] fileNameBytes = new byte[(int) sumLeng]; int fileNameReadLength=0; int hasReadLength=0;//已经读取的字节数 while((fileNameReadLength=ins.read(fileNameBytes,hasReadLength,(int)sumLeng-hasReadLength))>0){ hasReadLength=hasReadLength+fileNameReadLength; } return fileNameBytes; } /*** * read char array from inputstream according to specified length. * * @param file * @param ins * @param length2 * :要读取的字符总数 * @throws IOException */ public static char[] getCharsFromInputStream(BufferedReader br_right, int length2) throws IOException { int readSize; char[] chars = null; chars = new char[length2]; long length_tmp = length2; long index = 0;// start from zero while ((readSize = br_right.read(chars, (int) index, (int) length_tmp)) != -1) { length_tmp -= readSize; if (length_tmp == 0) { break; } index = index + readSize;// 写入字符数组的offset(偏移量) } return chars; } /*** * 从文件中读取指定长度的字符(注意:不是字节) * * @param file * @param length2 * @return * @throws IOException */ public static char[] getCharsFromFile(File file, int length2) throws IOException { FileInputStream fin = new FileInputStream(file); InputStreamReader inr = new InputStreamReader(fin); BufferedReader br = new BufferedReader(inr); return getCharsFromInputStream(br, length2); } private static byte[] readDataFromLength(HttpURLConnection huc, int contentLength) throws Exception { InputStream in = huc.getInputStream(); BufferedInputStream bis = new BufferedInputStream(in); // 数据字节数组 byte[] receData = new byte[contentLength]; // 已读取的长度 int readAlreadyLength = 0; // while ((readAlreadyLength+= bis.read(receData, readAlreadyLength, // contentLength-readAlreadyLength))< contentLength) { // System.out.println("right"); // } while ((readAlreadyLength = readAlreadyLength + bis.read(receData, readAlreadyLength, contentLength - readAlreadyLength)) < contentLength) { } // System.out.println("readLength=" + readLength); return receData; }
参考我的另外一篇博客:http://hw1287789687.iteye.com/blog/2019425
相关推荐
在易语言中,获取字节集长度通常使用“取字节集长度”命令,它的功能是返回指定字节集的长度,即字节集中包含的字节数。这个命令的语法非常简洁,只有一个参数:要查询长度的字节集。 例如,如果你有一个名为`字节...
这段代码首先使用`ImageIO.read(file)`方法从给定的文件中读取图片,然后调用`ImageIO.write()`方法将图片写入一个内存中的`ByteArrayOutputStream`,并返回其字节数据。 接下来,我们讨论如何“合并inputStream...
3. `int len`:长度,表示最多能从输入流中读取多少个字节到数组 `b`。 当调用 `readLine()` 方法时,它会尝试读取一行数据到提供的缓冲区 `b` 中。如果读取的一行数据超过了 `len` 指定的大小,`readLine()` 只会...
而`read(byte[] b, int off, int len)`允许指定起始偏移量`off`和最大读取长度`len`。需要注意的是,这两个方法也可能提前结束,所以在读取特定数量的字节时,通常需要在一个循环中使用,以确保读取到预期的字节数。...
- 读取字节流:通过InputStream类读取网络数据。 - 分析头信息:根据协议规范解析出头信息,例如长度、类型等。 - 解析负载:根据头信息确定负载的格式和长度,进一步解析负载内容。 - 构造数据结构:将解析出的...
3. 读取指定长度的字节数组:public int read(byte[] b, int off, int len) throws IOException 以下是一个简单的示例,演示如何使用 FileInputStream 从文件读取字节数据: ```java import java.io.File; import ...
`ByteArrayInputStream`继承自`InputStream`,用于从字节数组中读取数据。例如,可以使用以下代码创建一个从字节数组`buffer`中读取数据的流: ```java byte[] buffer = new byte[1024]; fillWithUsefulData(buffer)...
- `seek`方法用于定位读取位置,实现从指定位置开始读取数据。 - `public static final int MAX_RETRY = 10`: 定义了读取远程文件时的重试上限,防止无限重试导致的资源浪费。 - `public void close() {...}`: ...
3. `read(byte[] b, int off, int len)`:读取指定长度的数据到字节数组的指定位置。 InputStream还包含其他辅助方法,如: - `skip(long n)`:跳过n个字节。 - `available()`:返回可读取的字节数。 - `close()`:...
// 读取到字节数组中,byteRead为一次读取的字节数 while ((byteRead = in.read(tempBytes)) != -1) { System.out.write(tempBytes, 0, byteRead); } } catch (Exception e1) { e1.printStackTrace(); } ...
`readStream()`方法负责读取InputStream中的数据,并将其存储到一个字节数组中。这里使用了ByteArrayOutputStream和字节数组作为缓冲区,逐块读取输入流数据并写入输出流,直到流结束。最后,关闭输入流和输出流,并...
3. `readXXX()`方法:对应于`writeXXX()`,`RandomAccessFile`也提供了`readXXX()`方法,如`readByte()`, `readInt()`, `readDouble()`等,用于从文件中读取数据。 4. `getFilePointer()`: 返回当前文件指针的绝对...
`int read(byte[] b)`:从指定的输入流中读取数据并存储到字节数组b中,返回实际读取的字节数,如果返回值小于数组长度,则表示已经到达流的末尾。 2. `int read()`:从指定的输入流中读取单个字节,返回值为读取...
文档中提到的`HttpReader`类是用于从指定URL读取数据的工具类。它使用`HttpURLConnection`来建立HTTP连接,并通过`InputStream`读取数据。`HttpReader`类还包含了重试机制,当连接或读取失败时,会按照预设的最大重...
通过循环读取InputStream的数据,每次读取一定长度(如8192字节),然后写入到FileOutputStream,直到流结束。 ```java public void inputstreamToFile(InputStream ins, File file) throws IOException { ...
InputStream的基本方法包括read(),read(byte[]),read(byte[], int, int),用于读取单个字节、字节数组,以及指定偏移量和长度的字节数组。当到达文件末尾时,这些方法会返回-1作为标识。此外,InputStream还提供了...
在Java编程中,输入流(InputStream)是处理数据输入的核心类,它用于读取字节数据,例如从文件、网络连接或任何其他数据源。字节数组(byte array)则是存储二进制数据的基本数据结构。在Android开发或者一般的Java...
示例展示了如何使用字节流来读取文件内容,但是由于中文字符采用GBK编码每个字符占用两个字节,如果字节数组的长度小于2,读取过程中就可能出现乱码。为了避免这个问题,应当确保读取时分配足够大的字节数组,或者...
3. `read(byte[] b, int off, int len)`: 类似于`read(byte[] b)`,但允许指定读取的起始位置`off`和最大长度`len`。 4. `skip(long n)`: 跳过`n`个字节,返回实际跳过的字节数。可能会少于`n`,如果流中剩余的数据...