`

java 读取输入流

    博客分类:
  • Java
阅读更多

java 中如何读取输入流呢?

方式一:

/***
	 * Has been tested ok
	 * 
	 * @param in
	 * @return
	 * @throws IOException
	 */
	public static byte[] readBytes3(InputStream in) throws IOException {
		BufferedInputStream bufin = new BufferedInputStream(in);
		int 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();
		in.close();
		byte[] content = out.toByteArray();
		out.close();
		return content;
	}

 

方式二:

/***
	 * get byte[] from <code>InputStream</code> Low efficiency
	 * 
	 * @param in
	 * @return
	 * @throws IOException
	 */
	@Deprecated
	public static byte[] readBytes2(InputStream in) throws IOException {
		byte[] temp = new byte[1024];
		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 = mergeArray(result, readBytes);
		}
		return result;
	}
/***
	 * 合并字节数组
	 * 
	 * @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;
	}

 

方式三:

/***
	 * 指定字符编码,无损地读取文本文件.推荐!
	 * 
	 * @param in
	 *            : 输入流,会关闭
	 * @param charset
	 *            : 字符编码
	 * @return
	 * @throws IOException
	 */
	public static StringBuffer getFullContent3(InputStream in, String charset)
			throws IOException {
		StringBuffer sbuffer = new StringBuffer();
		InputStreamReader inReader;
		// 设置字符编码
		if (ValueWidget.isNullOrEmpty(charset)) {
			charset = SystemHWUtil.CURR_ENCODING;
		}
		inReader = new InputStreamReader(in, charset);
		char[] ch = new char[1024];
		int readCount = 0;
		while ((readCount = inReader.read(ch)) != -1) {
			sbuffer.append(ch, 0, readCount);
		}
		inReader.close();
		in.close();
		return sbuffer;
	}

 

方式四:

/***
	 * 先读取出来字节数组,然后在包装成为字符串;效率不高,因为有拷贝操作(System.arraycopy)
	 * 
	 * @param in
	 * @param charset
	 * @return
	 * @throws IOException
	 */
	public static String getFullContent2(InputStream in, String charset)
			throws IOException {
		//并不是要读取的字节的长度
		int step = BUFFSIZE_1024;
		BufferedInputStream bis = new BufferedInputStream(in);

		// Data's byte array
		byte[] receData = new byte[step];

		// data length read from the stream
		int readLength = 0;

		// data Array offset
		int offset = 0;

		// Data array length
		int byteLength = step;

		while ((readLength = bis.read(receData, offset, byteLength - offset)) != -1) {
			// Calculate the current length of the data
			offset += readLength;
			// Determine whether you need to copy data , when the remaining
			// space is less than step / 2, copy the data
			if (byteLength - offset <= step / 2) {
				byte[] tempData = new byte[receData.length + step];
				System.arraycopy(receData, 0, tempData, 0, offset);
				receData = tempData;
				byteLength = receData.length;
			}
		}

		return new String(receData, 0, offset, charset);
	}

 

方式五:

/***
	 * write inputstream into outputStream ,haven't close stream.
	 * 
	 * @param ins
	 * @param outs
	 */
	public static void writeIn2Output(InputStream ins, OutputStream outs,
			boolean isCloseOut, boolean isCloseInput) {
		try {
			int resultInt = -1;
			byte[] bytes = null;
			bytes = new byte[4096];

			try {
				while ((resultInt = ins.read(bytes)) != -1) {
					outs.write(bytes, 0, resultInt);
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (isCloseOut) {
					try {
						outs.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if (isCloseInput) {
					try {
						ins.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		} finally {

		}
	}

 

方式六:

/***
	 * write inputstream into file according to specified length.
	 * 
	 * @param file
	 * @param ins
	 * @param length2
	 * @throws IOException
	 */
	public static void writeInputStream2File(File file, InputStream ins,
			long length2, boolean isShutOutputStream) throws IOException {
		String parentDir = SystemHWUtil.getParentDir(file.getAbsolutePath());
		File fatherFile = new File(parentDir);
		if (!fatherFile.exists()) {
			fatherFile.mkdirs();
		}
		FileOutputStream outs = new FileOutputStream(file);
		int readSize;
		byte[] bytes = null;
		bytes = new byte[(int) length2];

		long length_tmp = length2;
		while ((readSize = ins.read(bytes)) != -1) {
			length_tmp -= readSize;

			outs.write(bytes, 0, readSize);
			if (length_tmp == 0) {
				break;
			}
			if (length_tmp < 4096) {
				bytes = new byte[(int) length_tmp];
			}
		}
		if (isShutOutputStream) {
			outs.close();
		}

	}

 

方式七:

/***
	 * 从输入流获取字节数组
	 * @param br_right
	 * @param length2
	 * @return
	 * @throws IOException
	 */
	public static byte[] readBytesFromInputStream(BufferedInputStream 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;
	}

 

0
0
分享到:
评论
1 楼 hw1287789687 2014-02-19  
参考:http://hw1287789687.iteye.com/blog/1991889

相关推荐

    java 输入输出流

    2. **字符流**:字符流处理Unicode字符数据,分为字符输入流(Reader)和字符输出流(Writer)。Reader的基类是`java.io.Reader`,Writer的基类是`java.io.Writer`。比如,`FileReader`用于读取字符文件,`...

    实验9 Java输入输出流.doc

    Java输入输出流是Java编程中一个非常重要的概念,主要用于数据的读取和写入操作,包括文本文件和二进制文件。在实验9中,主要目的是理解和掌握I/O流的分类,以及如何进行文本和二进制文件的读写。 I/O流在Java中被...

    Java 接收键盘输入流

    在Java编程语言中,接收键盘输入流是一项基本但至关重要的任务,它允许程序与用户进行交互。在给定的代码示例中,我们看到如何使用`java.io`包中的类来实现这一功能。以下是详细的知识点解释: 1. **...

    java输入输出流的简单例子

    Java的输入输出流分为字节流和字符流两大类,每类又分别有输入流和输出流四种类型,即InputStream、OutputStream、Reader和Writer。下面我们将深入探讨这些概念,并通过一个简单的例子来说明其使用方法。 字节流...

    java 视频流读写

    Java 视频流读写是Java编程中涉及多媒体处理的一部分,主要目的是为了在应用程序中处理、播放或存储视频数据。Java Media Framework (JMF) 是Java平台上的一个关键组件,用于处理音频、视频和流媒体内容。在这个"JMF...

    java输入输出流,电子课件

    输入流通常用于读取数据,而输出流用于写入数据。Java中,所有的输入流都继承自InputStream或Reader,所有输出流都继承自OutputStream或Writer。例如, FileInputStream 和 FileOutputStream 分别用于读写文件的字节...

    JAVA输入输出流实验报告

    通过这两个实验,我们可以了解到Java IO流的基本使用步骤:创建输入流对象,创建对应类型的输出流对象,然后通过读写方法进行数据传输,最后记得关闭流资源以释放系统资源。 此外,Java还提供了更高级的流,如`...

    java输入输出流与文件处理

    以输入流为例,首先需要创建一个与数据源相关的流对象,接着通过调用该对象的读取方法读取数据,最后调用`close()`方法关闭流以释放资源。字节流适用于处理二进制数据,而字符流更擅长处理文本数据,两者的区别在于...

    JAVa输入输出流程序

    在Java中,一切皆为流,输入流用于读取数据,而输出流用于写入数据。这些流可以处理各种类型的数据,包括文本、图像和音频等。 Java IO流体系基于一种层次结构,分为字节流和字符流两大类。字节流处理的是8位的字节...

    Java 输入输出流 源码

    它们都有输入流(InputStream/Reader)和输出流(OutputStream/Writer)的区别,分别负责数据的读取和写入。 2. **字节流**:InputStream和OutputStream是所有字节流的基类,如FileInputStream和FileOutputStream...

    Java输入输出流及文件读写详解

    输入流的设计目的是让开发者能够通过简单的方法来读取这些数据。 ##### 2. 输出流 输出流的作用则是将数据写入到外部数据源中。例如,可以将字符串或者字节数组写入到文件中或者发送到网络上。 #### 字节流与字符...

    Java流(文件读写操作)

    输入流只能从中读取数据,而不能向其中写入数据。例如,`FileInputStream`用于从文件中读取字节数据。 - **输出流**:主要用于向目的地写入数据。输出流只能向其中写入数据,而不能从中读取数据。例如,`...

    JAVA输入输出流详细解读

    1. **输入流(Input Stream)**:这类流负责将外部数据源的数据转换为可读的流格式,允许程序通过读取这些流来获取外部数据源的信息。 2. **输出流(Output Stream)**:与此相反,输出流的任务是将流中的数据转换...

    java输入输出流.ppt

    这些接口提供了基本的读写方法,例如read()和write(),允许程序从输入源读取数据或向输出目标写入数据。 **输入流(InputStream和Reader)** - InputStream是所有字节输入流的基类,例如: - ByteArrayInputStream...

    Java_输入输出流及文件读写详解

    输入流用于从数据源(如文件、网络连接)读取数据,输出流则用于将数据写入目标(如文件、网络连接)。Java中,这两个概念被进一步细分为字节流和字符流。 1. 字节流: - 字节输入流(Byte Input Stream)的基类是...

    java中的各种输入流与输出流

    以上就是Java中输入流与输出流的基本概念、分类及使用方法,它们是进行数据读写操作的核心工具。在实际编程中,根据不同的需求选择合适的流类型,并合理利用缓冲、转换和多线程技术,能够有效地提高程序的性能和可...

    java的输入输出流

    例如,FileInputStream类是用于从文件读取字节的输入流,可以通过文件路径、File对象或FileDescriptor对象进行初始化。而ByteArrayInputStream则允许我们从一个字节数组中读取数据。 对于输出流,OutputStream类是...

    java输入输出流的两种写法

    在Java中,输入流用于从源读取数据,而输出流用于向目的地写入数据。以下是两种常见的Java输入输出流的写法及其详细解释: 1. 字节流: - **FileInputStream** 和 **FileOutputStream**:这是处理文件输入输出的...

    java输入输出流学生成绩管理

    在学生成绩管理系统中,输入流通常用于从文件或数据库读取学生分数,而输出流则负责将这些数据写入到文件或数据库。例如,可以使用FileInputStream和FileOutputStream来读写文本文件,或者使用ObjectInputStream和...

    Demo(数据输出输入流).java

    java由数据流处理输入/输出(I/O)模式,其中,输入流是指打开一个从某数据源到程序的流,并从这个流中读取数据;输出流是为了将程序中的数据传输到某个目的地,在传输过程中,需要将数据写入这个流中。

Global site tag (gtag.js) - Google Analytics