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; }
相关推荐
2. **字符流**:字符流处理Unicode字符数据,分为字符输入流(Reader)和字符输出流(Writer)。Reader的基类是`java.io.Reader`,Writer的基类是`java.io.Writer`。比如,`FileReader`用于读取字符文件,`...
Java输入输出流是Java编程中一个非常重要的概念,主要用于数据的读取和写入操作,包括文本文件和二进制文件。在实验9中,主要目的是理解和掌握I/O流的分类,以及如何进行文本和二进制文件的读写。 I/O流在Java中被...
在Java编程语言中,接收键盘输入流是一项基本但至关重要的任务,它允许程序与用户进行交互。在给定的代码示例中,我们看到如何使用`java.io`包中的类来实现这一功能。以下是详细的知识点解释: 1. **...
Java的输入输出流分为字节流和字符流两大类,每类又分别有输入流和输出流四种类型,即InputStream、OutputStream、Reader和Writer。下面我们将深入探讨这些概念,并通过一个简单的例子来说明其使用方法。 字节流...
Java 视频流读写是Java编程中涉及多媒体处理的一部分,主要目的是为了在应用程序中处理、播放或存储视频数据。Java Media Framework (JMF) 是Java平台上的一个关键组件,用于处理音频、视频和流媒体内容。在这个"JMF...
输入流通常用于读取数据,而输出流用于写入数据。Java中,所有的输入流都继承自InputStream或Reader,所有输出流都继承自OutputStream或Writer。例如, FileInputStream 和 FileOutputStream 分别用于读写文件的字节...
通过这两个实验,我们可以了解到Java IO流的基本使用步骤:创建输入流对象,创建对应类型的输出流对象,然后通过读写方法进行数据传输,最后记得关闭流资源以释放系统资源。 此外,Java还提供了更高级的流,如`...
以输入流为例,首先需要创建一个与数据源相关的流对象,接着通过调用该对象的读取方法读取数据,最后调用`close()`方法关闭流以释放资源。字节流适用于处理二进制数据,而字符流更擅长处理文本数据,两者的区别在于...
在Java中,一切皆为流,输入流用于读取数据,而输出流用于写入数据。这些流可以处理各种类型的数据,包括文本、图像和音频等。 Java IO流体系基于一种层次结构,分为字节流和字符流两大类。字节流处理的是8位的字节...
它们都有输入流(InputStream/Reader)和输出流(OutputStream/Writer)的区别,分别负责数据的读取和写入。 2. **字节流**:InputStream和OutputStream是所有字节流的基类,如FileInputStream和FileOutputStream...
输入流的设计目的是让开发者能够通过简单的方法来读取这些数据。 ##### 2. 输出流 输出流的作用则是将数据写入到外部数据源中。例如,可以将字符串或者字节数组写入到文件中或者发送到网络上。 #### 字节流与字符...
输入流只能从中读取数据,而不能向其中写入数据。例如,`FileInputStream`用于从文件中读取字节数据。 - **输出流**:主要用于向目的地写入数据。输出流只能向其中写入数据,而不能从中读取数据。例如,`...
1. **输入流(Input Stream)**:这类流负责将外部数据源的数据转换为可读的流格式,允许程序通过读取这些流来获取外部数据源的信息。 2. **输出流(Output Stream)**:与此相反,输出流的任务是将流中的数据转换...
这些接口提供了基本的读写方法,例如read()和write(),允许程序从输入源读取数据或向输出目标写入数据。 **输入流(InputStream和Reader)** - InputStream是所有字节输入流的基类,例如: - ByteArrayInputStream...
输入流用于从数据源(如文件、网络连接)读取数据,输出流则用于将数据写入目标(如文件、网络连接)。Java中,这两个概念被进一步细分为字节流和字符流。 1. 字节流: - 字节输入流(Byte Input Stream)的基类是...
以上就是Java中输入流与输出流的基本概念、分类及使用方法,它们是进行数据读写操作的核心工具。在实际编程中,根据不同的需求选择合适的流类型,并合理利用缓冲、转换和多线程技术,能够有效地提高程序的性能和可...
例如,FileInputStream类是用于从文件读取字节的输入流,可以通过文件路径、File对象或FileDescriptor对象进行初始化。而ByteArrayInputStream则允许我们从一个字节数组中读取数据。 对于输出流,OutputStream类是...
在Java中,输入流用于从源读取数据,而输出流用于向目的地写入数据。以下是两种常见的Java输入输出流的写法及其详细解释: 1. 字节流: - **FileInputStream** 和 **FileOutputStream**:这是处理文件输入输出的...
在学生成绩管理系统中,输入流通常用于从文件或数据库读取学生分数,而输出流则负责将这些数据写入到文件或数据库。例如,可以使用FileInputStream和FileOutputStream来读写文本文件,或者使用ObjectInputStream和...
java由数据流处理输入/输出(I/O)模式,其中,输入流是指打开一个从某数据源到程序的流,并从这个流中读取数据;输出流是为了将程序中的数据传输到某个目的地,在传输过程中,需要将数据写入这个流中。