package org.apache.cxf.helpers; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.nio.charset.Charset; public final class IOUtils { public static final Charset UTF8_CHARSET = Charset.forName("utf-8"); private static final int DEFAULT_BUFFER_SIZE = 1024 * 4; private IOUtils() { } /** * Use this function instead of new String(byte[], String) to avoid surprises from * non-standard default encodings. * @param bytes * @param charsetName * @return */ public static String newStringFromBytes(byte[] bytes, String charsetName) { try { return new String(bytes, charsetName); } catch (UnsupportedEncodingException e) { throw new RuntimeException("Impossible failure: Charset.forName(\"" + charsetName + "\") returns invalid name."); } } /** * Use this function instead of new String(byte[]) to avoid surprises from non-standard default encodings. * @param bytes * @return */ public static String newStringFromBytes(byte[] bytes) { return newStringFromBytes(bytes, UTF8_CHARSET.name()); } /** * Use this function instead of new String(byte[], int, int, String) * to avoid surprises from non-standard default encodings. * @param bytes * @param charsetName * @param start * @param length * @return */ public static String newStringFromBytes(byte[] bytes, String charsetName, int start, int length) { try { return new String(bytes, start, length, charsetName); } catch (UnsupportedEncodingException e) { throw new RuntimeException("Impossible failure: Charset.forName(\"" + charsetName + "\") returns invalid name."); } } /** * Use this function instead of new String(byte[], int, int) * to avoid surprises from non-standard default encodings. * @param bytes * @param start * @param length * @return */ public static String newStringFromBytes(byte[] bytes, int start, int length) { return newStringFromBytes(bytes, UTF8_CHARSET.name(), start, length); } public static int copy(final InputStream input, final OutputStream output) throws IOException { return copy(input, output, DEFAULT_BUFFER_SIZE); } public static int copyAndCloseInput(final InputStream input, final OutputStream output) throws IOException { try { return copy(input, output, DEFAULT_BUFFER_SIZE); } finally { input.close(); } } public static int copyAndCloseInput(final InputStream input, final OutputStream output, int bufferSize) throws IOException { try { return copy(input, output, bufferSize); } finally { input.close(); } } public static int copy(final InputStream input, final OutputStream output, int bufferSize) throws IOException { int avail = input.available(); if (avail > 262144) { avail = 262144; } if (avail > bufferSize) { bufferSize = avail; } final byte[] buffer = new byte[bufferSize]; int n = 0; n = input.read(buffer); int total = 0; while (-1 != n) { if (n == 0) { throw new IOException("0 bytes read in violation of InputStream.read(byte[])"); } output.write(buffer, 0, n); total += n; n = input.read(buffer); } return total; } public static void copy(final Reader input, final Writer output, final int bufferSize) throws IOException { final char[] buffer = new char[bufferSize]; int n = 0; n = input.read(buffer); while (-1 != n) { if (n == 0) { throw new IOException("0 bytes read in violation of InputStream.read(byte[])"); } output.write(buffer, 0, n); n = input.read(buffer); } } public static String toString(final InputStream input) throws IOException { return toString(input, DEFAULT_BUFFER_SIZE); } public static String toString(final InputStream input, String charset) throws IOException { return toString(input, DEFAULT_BUFFER_SIZE, charset); } public static String toString(final InputStream input, int bufferSize) throws IOException { return toString(input, bufferSize, null); } public static String toString(final InputStream input, int bufferSize, String charset) throws IOException { int avail = input.available(); if (avail > bufferSize) { bufferSize = avail; } Reader reader = charset == null ? new InputStreamReader(input, UTF8_CHARSET) : new InputStreamReader(input, charset); return toString(reader, bufferSize); } public static String toString(final Reader input) throws IOException { return toString(input, DEFAULT_BUFFER_SIZE); } public static String toString(final Reader input, int bufSize) throws IOException { StringBuilder buf = new StringBuilder(); final char[] buffer = new char[bufSize]; int n = 0; n = input.read(buffer); while (-1 != n) { if (n == 0) { throw new IOException("0 bytes read in violation of InputStream.read(byte[])"); } buf.append(new String(buffer, 0, n)); n = input.read(buffer); } input.close(); return buf.toString(); } public static String readStringFromStream(InputStream in) throws IOException { StringBuilder sb = new StringBuilder(1024); for (int i = in.read(); i != -1; i = in.read()) { sb.append((char) i); } in.close(); return sb.toString(); } /** * Load the InputStream into memory and return a ByteArrayInputStream that * represents it. Closes the in stream. * * @param in * @return * @throws IOException */ public static ByteArrayInputStream loadIntoBAIS(InputStream in) throws IOException { int i = in.available(); if (i < DEFAULT_BUFFER_SIZE) { i = DEFAULT_BUFFER_SIZE; } LoadingByteArrayOutputStream bout = new LoadingByteArrayOutputStream(i); copy(in, bout); in.close(); return bout.createInputStream(); } public static void consume(InputStream in) throws IOException { int i = in.available(); if (i == 0) { //if i is 0, then we MAY have already hit the end of the stream //so try a read and return rather than allocate a buffer and such int i2 = in.read(); if (i2 == -1) { return; } //reading the byte may have caused a buffer to fill i = in.available(); } if (i < DEFAULT_BUFFER_SIZE) { i = DEFAULT_BUFFER_SIZE; } if (i > 65536) { i = 65536; } byte bytes[] = new byte[i]; while (in.read(bytes) != -1) { //nothing - just discarding } } public static byte[] readBytesFromStream(InputStream in) throws IOException { int i = in.available(); if (i < DEFAULT_BUFFER_SIZE) { i = DEFAULT_BUFFER_SIZE; } ByteArrayOutputStream bos = new ByteArrayOutputStream(i); copy(in, bos); in.close(); return bos.toByteArray(); } }
相关推荐
本篇文章将全面解析Java IO工具类,帮助你理解并掌握其在实际开发中的应用。 一、Java IO基础 Java IO体系主要由流(Stream)组成,分为字节流和字符流两大类,分别处理字节数据和字符数据。字节流包括InputStream...
总的来说,Java的IO流体系结构复杂而强大,它提供了多种工具和策略来处理各种数据传输场景,包括文件操作、网络通信、对象序列化等。理解并熟练运用这些流可以帮助我们构建高效、可靠的Java应用程序。
在Java编程中,IO流(Input/Output Stream)是用来处理数据输入和输出的重要工具。它允许程序与外部设备,如硬盘、网络、内存等进行数据交互。IO流分为两大类:字节流(处理字节数据)和字符流(处理字符数据)。...
统一修改目录下文件后缀名,IO流的基本操作,递归遍历目录下所有文件,找到符合条件的后缀并修改
总的来说,Java IO流是一个强大的工具集,它涵盖了各种数据源和目标的输入输出操作,从简单的文件读写到复杂的网络通信和对象序列化。理解并熟练运用Java IO流是成为一名合格的Java开发者的必备技能之一。通过深入...
在本篇文章中,我们将深入探讨Java IO流的基本结构、主要类和接口,以及如何使用它们来操作文件。"IO流结构图_io_java_思维导图_" 提供了一个清晰的可视化工具,帮助开发者理解这一复杂主题。 首先,让我们了解一下...
接下来,我们转向`IO流`,它是Java处理输入和输出的核心工具。`IO流`分为两类:字节流(Byte Stream)和字符流(Character Stream)。 1. **字节流**:处理原始的字节数据,包括`InputStream`和`OutputStream`作为...
- **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、键盘输入、网络连接等;而目的地则可能是屏幕显示...
总之,Java IO流是处理数据输入输出的核心工具,无论是在文件操作、网络通信还是数据传输等方面都有广泛的应用。理解和熟练使用各种流类型,能够帮助开发者编写出高效、可靠的代码。在实践过程中,不断尝试和理解...
Apache Commons IO是Apache软件基金会开发的一个Java库,它提供了大量的实用工具类,简化了I/O操作,包括文件、流、过滤器、读写操作、转码等。在本教程中,我们将深入探讨如何使用Apache Commons IO进行转码,特别...
综上所述,这个“U盘背景修改工具”是一个使用IO流技术,专注于改变U盘背景的简单软件,适用于单个U盘的用户。它涉及到的知识点包括IO流的使用、文件操作、错误处理以及简单的用户界面设计。虽然功能有限,但对于...
在Java编程语言中,IO流(Input/Output流)是用来处理数据输入与输出的重要工具。在文本文件的复制过程中,通常会用到三种主要的流类型:字节流(Byte Stream)、字符流(Character Stream)以及缓冲流(Buffered ...
`FileUtil.java`可能是包含了一些文件操作的工具类,如读写文件、复制文件等,通常在处理文件I/O时会非常有用。 `TestFileReader.java`和`TestDataInputStream.java`可能分别展示了如何使用FileReader(字符输入流...
Java中的IO流是用于在程序与外部资源(如磁盘、网络、内存等)之间传输数据的重要工具。流的概念源于计算机科学中的数据流思想,它代表了数据的有序传输。在Java中,IO流提供了一种标准化的方式来处理输入和输出操作...
总的来说,Java IO流提供了一套强大且灵活的工具,使得开发者能够轻松地实现各种输入输出操作。理解流的概念以及其工作方式对于开发高效的Java程序至关重要。通过熟练掌握这一部分的知识,开发者可以有效地处理程序...
总的来说,Java的IO流体系结构是一个强大的工具,它允许开发者灵活地处理各种数据输入输出任务,从简单的文件操作到复杂的网络通信。理解并熟练掌握这个体系结构,对于任何Java开发者来说都是至关重要的。
Java中的IO流是Java平台提供的一种处理输入输出数据的核心机制,广泛应用于文件读写、网络通信、数据转换等场景。IO流分为字节流(Byte Stream)和字符流(Character Stream),它们构成了Java IO系统的基础。 1. *...
Apache Commons IO库是一个非常实用的辅助库,其中的`commons-io-1.4.jar`包含了大量对IO操作进行简化和扩展的工具类。例如: 1. **FileUtils**: 提供了大量静态方法来操作文件,如复制、移动、删除、比较文件等,...
Commons IO是Apache软件基金会开发的一个Java库,它提供了对输入/输出操作的实用工具类,极大地简化了处理文件、流、字符集等任务的工作。这个库被称为"Common-io工具类",它包含了大量的静态方法,可以用于各种常见...
总的来说,C#的文本IO流提供了一套强大的工具,使得开发者能够高效、灵活地处理文本数据的输入输出,无论是简单的文件操作还是复杂的网络通信,都可以借助这些类来实现。通过理解`Stream`及其相关类的工作原理,我们...