content: /*
   * Created by LuaView.
   * Copyright (c) 2017, Alibaba Group. All rights reserved.
   *
   * This source code is licensed under the MIT.
   * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
   */
  
  package com.taobao.luaview.util;
  
  import com.taobao.luaview.userdata.kit.UDData;
  
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  
  /**
   * IO 处理
   *
   * @author song
   * @date 15/11/10
   */
  public class IOUtil {
      public static final int BUFFER_SIZE = 8 * 1024; //8k
  
      /**
       * convert a inputstream to bytes
       * TODO 这里会改变input stream，应该不能改变input
       *
       * @param input
       * @return
       */
      public static byte[] toBytes(final InputStream input) {
  //        DebugUtil.tsi("luaviewp-toBytes");
          byte[] buffer = new byte[BUFFER_SIZE];
          int bytesRead;
          final ByteArrayOutputStream output = new ByteArrayOutputStream();
          try {
              while ((bytesRead = input.read(buffer)) != -1) {
                  output.write(buffer, 0, bytesRead);
              }
              return output.toByteArray();
          } catch (Exception e) {
              e.printStackTrace();
              return null;
          } finally {
  //            DebugUtil.tei("luaviewp-toBytes");
              try {
                  output.close();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
  
      /**
       * convert input stream of inputEncoding to stream of DEFAULT_ENCODE
       *
       * @param input
       * @param inputEncoding
       * @return
       */
      public static byte[] toBytes(final InputStream input, final String inputEncoding) {
          byte[] result = toBytes(input);
          if (result != null && inputEncoding != null && !UDData.DEFAULT_ENCODE.equalsIgnoreCase(inputEncoding)) {
              try {
                  return new String(result, inputEncoding).getBytes(UDData.DEFAULT_ENCODE);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
          return result;
      }
  
      /**
       * read input stream to bytes
       *
       * @param input
       * @param length
       * @return
       */
      public static byte[] toBytes(final InputStream input, int length) {
          if (length > 0) {
              byte[] bytes = new byte[length];
              int count;
              int pos = 0;
              try {
                  while (pos < length && ((count = input.read(bytes, pos, length - pos)) != -1)) {
                      pos += count;
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }
  
              if (pos != length) {
                  return null;
              }
              return bytes;
          } else {
              return toBytes(input);
          }
      }
  
      /**
       * read input stream to bytes
       *
       * @param input
       * @param length
       * @param inputEncoding
       * @return
       */
      public static byte[] toBytes(final InputStream input, int length, final String inputEncoding) {
          byte[] result = toBytes(input, length);
          if (result != null && inputEncoding != null && !UDData.DEFAULT_ENCODE.equalsIgnoreCase(inputEncoding)) {
              try {
                  return new String(result, inputEncoding).getBytes(UDData.DEFAULT_ENCODE);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
          return result;
      }
  }
  