`

从inputStream中读取指定长度的字节

    博客分类:
  • Java
阅读更多

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

  • 大小: 16.4 KB
0
0
分享到:
评论

相关推荐

    取字节集长度.rar

    在易语言中,获取字节集长度通常使用“取字节集长度”命令,它的功能是返回指定字节集的长度,即字节集中包含的字节数。这个命令的语法非常简洁,只有一个参数:要查询长度的字节集。 例如,如果你有一个名为`字节...

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

    这段代码首先使用`ImageIO.read(file)`方法从给定的文件中读取图片,然后调用`ImageIO.write()`方法将图片写入一个内存中的`ByteArrayOutputStream`,并返回其字节数据。 接下来,我们讨论如何“合并inputStream...

    原理讲解-ServletInputStream.readLine(byte[] b, int off, int len) 方法

    3. `int len`:长度,表示最多能从输入流中读取多少个字节到数组 `b`。 当调用 `readLine()` 方法时,它会尝试读取一行数据到提供的缓冲区 `b` 中。如果读取的一行数据超过了 `len` 指定的大小,`readLine()` 只会...

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

    而`read(byte[] b, int off, int len)`允许指定起始偏移量`off`和最大读取长度`len`。需要注意的是,这两个方法也可能提前结束,所以在读取特定数量的字节时,通常需要在一个循环中使用,以确保读取到预期的字节数。...

    java字节流和字符流[借鉴].pdf

    3. 读取指定长度的字节数组:public int read(byte[] b, int off, int len) throws IOException 以下是一个简单的示例,演示如何使用 FileInputStream 从文件读取字节数据: ```java import java.io.File; import ...

    Packet字节流解析工具说明_Packet字节流解析工具说明_

    - 读取字节流:通过InputStream类读取网络数据。 - 分析头信息:根据协议规范解析出头信息,例如长度、类型等。 - 解析负载:根据头信息确定负载的格式和长度,进一步解析负载内容。 - 构造数据结构:将解析出的...

    Java入门笔记7_Stream

    `ByteArrayInputStream`继承自`InputStream`,用于从字节数组中读取数据。例如,可以使用以下代码创建一个从字节数组`buffer`中读取数据的流: ```java byte[] buffer = new byte[1024]; fillWithUsefulData(buffer)...

    用JAVA实现缓冲多线程无阻塞读取远程文件.pdf

    - `seek`方法用于定位读取位置,实现从指定位置开始读取数据。 - `public static final int MAX_RETRY = 10`: 定义了读取远程文件时的重试上限,防止无限重试导致的资源浪费。 - `public void close() {...}`: ...

    java_IO流的处理.ppt

    3. `read(byte[] b, int off, int len)`:读取指定长度的数据到字节数组的指定位置。 InputStream还包含其他辅助方法,如: - `skip(long n)`:跳过n个字节。 - `available()`:返回可读取的字节数。 - `close()`:...

    [Java]读取文件方法大全

    // 读取到字节数组中,byteRead为一次读取的字节数 while ((byteRead = in.read(tempBytes)) != -1) { System.out.write(tempBytes, 0, byteRead); } } catch (Exception e1) { e1.printStackTrace(); } ...

    读取网络图片

    `readStream()`方法负责读取InputStream中的数据,并将其存储到一个字节数组中。这里使用了ByteArrayOutputStream和字节数组作为缓冲区,逐块读取输入流数据并写入输出流,直到流结束。最后,关闭输入流和输出流,并...

    Java RandomAccessFile 指定位置实现文件读取与写入

    3. `readXXX()`方法:对应于`writeXXX()`,`RandomAccessFile`也提供了`readXXX()`方法,如`readByte()`, `readInt()`, `readDouble()`等,用于从文件中读取数据。 4. `getFilePointer()`: 返回当前文件指针的绝对...

    Java Stream 全面讲解

    `int read(byte[] b)`:从指定的输入流中读取数据并存储到字节数组b中,返回实际读取的字节数,如果返回值小于数组长度,则表示已经到达流的末尾。 2. `int read()`:从指定的输入流中读取单个字节,返回值为读取...

    用JAVA实现缓冲多线程无阻塞读取远程文件.doc

    文档中提到的`HttpReader`类是用于从指定URL读取数据的工具类。它使用`HttpURLConnection`来建立HTTP连接,并通过`InputStream`读取数据。`HttpReader`类还包含了重试机制,当连接或读取失败时,会按照预设的最大重...

    JAVAIO流学生课件PPT教案学习.pptx

    InputStream的基本方法包括read(),read(byte[]),read(byte[], int, int),用于读取单个字节、字节数组,以及指定偏移量和长度的字节数组。当到达文件末尾时,这些方法会返回-1作为标识。此外,InputStream还提供了...

    java从输入流中获取数据并返回字节数组示例

    在Java编程中,输入流(InputStream)是处理数据输入的核心类,它用于读取字节数据,例如从文件、网络连接或任何其他数据源。字节数组(byte array)则是存储二进制数据的基本数据结构。在Android开发或者一般的Java...

    详解JAVA 字节流和字符流

    示例展示了如何使用字节流来读取文件内容,但是由于中文字符采用GBK编码每个字符占用两个字节,如果字节数组的长度小于2,读取过程中就可能出现乱码。为了避免这个问题,应当确保读取时分配足够大的字节数组,或者...

    Java输入数据流详解

    3. `read(byte[] b, int off, int len)`: 类似于`read(byte[] b)`,但允许指定读取的起始位置`off`和最大长度`len`。 4. `skip(long n)`: 跳过`n`个字节,返回实际跳过的字节数。可能会少于`n`,如果流中剩余的数据...

    _Java数据流.ppt

    `read(byte[] b)` 方法读取多个字节并存储到提供的字节数组中,而 `read(byte[] b, int off, int len)` 允许指定读取的起始位置和长度。 相反,`OutputStream` 是字节输出流的基类,包含写入单个字节、写入字节数组...

Global site tag (gtag.js) - Google Analytics