자바 Base 64 디 코딩 오류 및 해결 방법

질문 제기:
자신 은 작은 사 이 트 를 만들어 연습 을 하고 있 지만 전단 사진 은 base 64 암호 화 를 거 쳐 뒤로 넘 겨 디 코딩 을 하고 있 습 니 다.하지만 항상 문제 가 있 습 니 다.신의 가르침 을 바 랍 니 다.

  public static String base64ToImg(String src) throws IOException {
    String uuid = UUID.randomUUID().toString();
    StringBuilder newPath = new StringBuilder(IMG_ROOT_PATH);
    newPath.append(separator).
        append(uuid).
        append(IMG_SUFFIX);
    if(src == null){
      return null;
    }
    byte[] data = null;
    Base64.Decoder decoder = Base64.getDecoder();
    try (OutputStream out = new FileOutputStream(newPath.toString())) {
      data = decoder.decode(src);
      out.write(data);
      return newPath.toString();
    } catch (IOException e) {
      throw new IOException();
    }
  }

java.lang.IllegalArgumentException: Input byte array has wrong 4-byte ending unit
이상 은 관련 이상 정보 입 니 다.나 는 전단 의 base 64 코드 를 메모 장 에 붙 여 넣 고 스스로 디 코딩 을 시도 하 는 것 도 같은 문제 이다.
해결 방법:
IllegalArgument 예외:불법 매개 변수 이상,
이것 괜찮아요?
과정 을 말씀 드 리 겠 습 니 다.
stackoverflow,debug 를 갔습니다.마지막 으로 data 가 null 인 것 을 발 견 했 습 니 다.힘 내세 요.저희 가 배 워 야 할 것 이 많 습 니 다.
다음 에 문제 가 생기 면 debug 에서 어떤 코드 에 문제 가 생 겼 는 지 보고 대답 을 통 해 저도 많이 배 웠 습 니 다.
관건 은 여기에 있다.throw new IOException();

try (OutputStream out = new FileOutputStream(newPath.toString())) {
      out.write(data);
    } catch (IOException e) {
      e.printStackTrace();
      throw new RuntimeException("        ");
      //throw new RuntimeException(e);
    }

public static String base64ToImg(String src) throws IOException {
    String uuid = UUID.randomUUID().toString();
    StringBuilder newPath = new StringBuilder("xx");
    newPath.append("xx").
        append(uuid).
        append("xx");
    if (src == null) {
      return null;
    }
    byte[] data = Base64.getDecoder().decode(src);
    try (OutputStream out = new FileOutputStream(newPath.toString())) {
      out.write(data);
    } catch (IOException e) {
      e.printStackTrace();
    }
    return newPath.toString();
  }
자주 사용 하 는 닫 기 자원 추가:

 public static String base64ToImg(String src) throws IOException {
    String uuid = UUID.randomUUID().toString();
    StringBuilder newPath = new StringBuilder("xx");
    newPath.append("xx").
        append(uuid).
        append("xx");
    if (src == null) {
      return null;
    }
    byte[] data = null;
    OutputStream out = null;
    Base64.Decoder decoder = Base64.getDecoder();
    try {
      out = new FileOutputStream(newPath.toString());
      data = decoder.decode(src);
      out.write(data);
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if (out != null) {
        out.close();
      }
    }
    return newPath.toString();
  }

좋은 웹페이지 즐겨찾기