찾다

 >  Q&A  >  본문

java - 字节流转成字符串之后,在通过字符串转成字节流后的文件为什么会不一样?

 public static void main(String[] args) throws Exception {
        File sourceFile = new File("/home/joy/图片/img1-lg.jpg");
        File tempFile = new File("/home/joy/桌面/TempFile");
        saveTempFile(sourceFile, tempFile);
        String str = byteToString(tempFile);
        File saveFile = new File("/home/joy/桌面/saveFile.jpg");
        StringTobyte(str,saveFile);
    }

    // 保存临时文件
    public static void saveTempFile(File sourceFile, File tempFile) throws Exception {
        FileInputStream inputStream = new FileInputStream(sourceFile);
        FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
        byte[] buf = new byte[10 * 1024];
        int readLeng = 0;
        while ((readLeng = inputStream.read(buf)) != -1) {
            fileOutputStream.write(buf, 0, readLeng);
            fileOutputStream.flush();
        }
        fileOutputStream.close();
        inputStream.close();
    }

    // 文件字节转字符串
    public static String byteToString(File file) throws Exception {
        StringBuilder returnDatas = new StringBuilder();
        FileInputStream fileInputStream = new FileInputStream(file);
        byte[] buf = new byte[10 * 1024];
        int readLenth = 0;
        while ((readLenth = fileInputStream.read(buf)) != -1) {
            returnDatas.append(new String(buf,0,readLenth));
        }
        fileInputStream.close();
        return returnDatas.toString();
    }

    // 字符串转文件
    public static void StringTobyte(String str,File file) throws Exception {
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        fileOutputStream.write(str.getBytes());
        fileOutputStream.close();
    }
    
    

代码大意:把一张图片通过字节流转成一个字符串,然后在获取该字符串的字节后还原为文件。
理解中,字符只是多带一层编码,还原成字节后应该还是能获取到源文件的呀。

ringa_leeringa_lee2803일 전853

모든 응답(3)나는 대답할 것이다

  • 黄舟

    黄舟2017-04-18 10:55:53

    으아악

    읽은 바이너리 이미지 파일은 올바른 문자열이 아니며 구문 분석할 수 없는 바이너리 데이터는 필터링됩니다.
    javadoc의 설명을 참조하세요:

    이 방법은 항상 잘못된 입력 및 매핑할 수 없는 문자 시퀀스를 이 문자 집합의 기본 대체 문자열로 바꿉니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-18 10:55:53

    인코딩과 디코딩이 반드시 무손실인 것은 아닙니다. 무손실 인코딩 및 디코딩이 가능한 이미지 파일에서 바이트 스트림을 읽을 가능성은 매우 적습니다.

    으아악

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 10:55:53

    먼저 직렬화를 확인하려면 base64를 사용하여 다시 변환하는 데 문제가 없는지 확인할 수 있습니다.

    회신하다
    0
  • 취소회신하다