`
113.com
  • 浏览: 81176 次
  • 来自: 广州
社区版块
存档分类
最新评论

操作IO流工具类

    博客分类:
  • java
 
阅读更多
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基础 Java IO体系主要由流(Stream)组成,分为字节流和字符流两大类,分别处理字节数据和字符数据。字节流包括InputStream...

    IO流 javaio java 流

    总的来说,Java的IO流体系结构复杂而强大,它提供了多种工具和策略来处理各种数据传输场景,包括文件操作、网络通信、对象序列化等。理解并熟练运用这些流可以帮助我们构建高效、可靠的Java应用程序。

    IO流自用模板

    在Java编程中,IO流(Input/Output Stream)是用来处理数据输入和输出的重要工具。它允许程序与外部设备,如硬盘、网络、内存等进行数据交互。IO流分为两大类:字节流(处理字节数据)和字符流(处理字符数据)。...

    IO流修改目录下文件后缀工具类

    统一修改目录下文件后缀名,IO流的基本操作,递归遍历目录下所有文件,找到符合条件的后缀并修改

    Java IO流总结

    总的来说,Java IO流是一个强大的工具集,它涵盖了各种数据源和目标的输入输出操作,从简单的文件读写到复杂的网络通信和对象序列化。理解并熟练运用Java IO流是成为一名合格的Java开发者的必备技能之一。通过深入...

    IO流结构图_io_java_思维导图_

    在本篇文章中,我们将深入探讨Java IO流的基本结构、主要类和接口,以及如何使用它们来操作文件。"IO流结构图_io_java_思维导图_" 提供了一个清晰的可视化工具,帮助开发者理解这一复杂主题。 首先,让我们了解一下...

    map集合以及IO流

    接下来,我们转向`IO流`,它是Java处理输入和输出的核心工具。`IO流`分为两类:字节流(Byte Stream)和字符流(Character Stream)。 1. **字节流**:处理原始的字节数据,包括`InputStream`和`OutputStream`作为...

    java基础之IO流

    - **定义**:在Java中,IO流(Input/Output Streams)是用来处理输入输出的基本工具。流是一种有序的数据集合,通常涉及从源到目的地的数据传输过程。源可以是文件、键盘输入、网络连接等;而目的地则可能是屏幕显示...

    IO流的demo

    总之,Java IO流是处理数据输入输出的核心工具,无论是在文件操作、网络通信还是数据传输等方面都有广泛的应用。理解和熟练使用各种流类型,能够帮助开发者编写出高效、可靠的代码。在实践过程中,不断尝试和理解...

    Apache common io转码工具类入门教程

    Apache Commons IO是Apache软件基金会开发的一个Java库,它提供了大量的实用工具类,简化了I/O操作,包括文件、流、过滤器、读写操作、转码等。在本教程中,我们将深入探讨如何使用Apache Commons IO进行转码,特别...

    U盘背景修改工具 利用IO流写文件到U盘(只能用单个U盘)

    综上所述,这个“U盘背景修改工具”是一个使用IO流技术,专注于改变U盘背景的简单软件,适用于单个U盘的用户。它涉及到的知识点包括IO流的使用、文件操作、错误处理以及简单的用户界面设计。虽然功能有限,但对于...

    IO流三种流方式的文本文件的复制

    在Java编程语言中,IO流(Input/Output流)是用来处理数据输入与输出的重要工具。在文本文件的复制过程中,通常会用到三种主要的流类型:字节流(Byte Stream)、字符流(Character Stream)以及缓冲流(Buffered ...

    javaIO流基础.zip_IO流 上传 下载文件_io流 上传_io流下载_下载

    `FileUtil.java`可能是包含了一些文件操作的工具类,如读写文件、复制文件等,通常在处理文件I/O时会非常有用。 `TestFileReader.java`和`TestDataInputStream.java`可能分别展示了如何使用FileReader(字符输入流...

    java IO流 教程宝典

    Java中的IO流是用于在程序与外部资源(如磁盘、网络、内存等)之间传输数据的重要工具。流的概念源于计算机科学中的数据流思想,它代表了数据的有序传输。在Java中,IO流提供了一种标准化的方式来处理输入和输出操作...

    java io流PPT课件.pptx

    总的来说,Java IO流提供了一套强大且灵活的工具,使得开发者能够轻松地实现各种输入输出操作。理解流的概念以及其工作方式对于开发高效的Java程序至关重要。通过熟练掌握这一部分的知识,开发者可以有效地处理程序...

    586.584.JAVA基础教程_IO流-IO流的体系结构(586).rar

    总的来说,Java的IO流体系结构是一个强大的工具,它允许开发者灵活地处理各种数据输入输出任务,从简单的文件操作到复杂的网络通信。理解并熟练掌握这个体系结构,对于任何Java开发者来说都是至关重要的。

    java中IO流例子

    Java中的IO流是Java平台提供的一种处理输入输出数据的核心机制,广泛应用于文件读写、网络通信、数据转换等场景。IO流分为字节流(Byte Stream)和字符流(Character Stream),它们构成了Java IO系统的基础。 1. *...

    commons-io-1.4.jar.zip_io流jar

    Apache Commons IO库是一个非常实用的辅助库,其中的`commons-io-1.4.jar`包含了大量对IO操作进行简化和扩展的工具类。例如: 1. **FileUtils**: 提供了大量静态方法来操作文件,如复制、移动、删除、比较文件等,...

    Common-io工具类

    Commons IO是Apache软件基金会开发的一个Java库,它提供了对输入/输出操作的实用工具类,极大地简化了处理文件、流、字符集等任务的工作。这个库被称为"Common-io工具类",它包含了大量的静态方法,可以用于各种常见...

    c#_文本IO流

    总的来说,C#的文本IO流提供了一套强大的工具,使得开发者能够高效、灵活地处理文本数据的输入输出,无论是简单的文件操作还是复杂的网络通信,都可以借助这些类来实现。通过理解`Stream`及其相关类的工作原理,我们...

Global site tag (gtag.js) - Google Analytics