base64 인코딩 처리 대용량 파일
5400 단어 base64
파일을 base64 인코딩으로 바꾸는 것은 파일을 메모리에 읽고 base64 인코딩을 해서 파일로 출력합니다.코드 입력:
1
2
3
4
5
6
7
8
9
10
FileInputStream stream =
new
FileInputStream(
"D:\\ \\ - 4 .pdf"
);
ByteArrayOutputStream
out
=
new
ByteArrayOutputStream(1024);
byte
[] b =
new
byte
[1024];
int
n;
while
((n = stream.read(b)) != -1) {
out
.write(b, 0, n);
}
stream.close();
out
.close();
System.
out
.println(
new
String(Base64.encodeBase64(
out
.toByteArray())));
그러나 큰 파일은 base64 인코딩을 할 때 OOM(OOM은 out of memory의 약칭으로 메모리 넘침)을 만나게 된다.
OOM이 생기는 이유:
따라서 큰 파일을base64 인코딩할 때 세그먼트 인코딩을 사용하여 출력할 수 있다.코드 입력:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// base64 www.1b23.com
ByteArrayOutputStream os1 =
new
ByteArrayOutputStream();
InputStream file1 =
new
FileInputStream(
"D:\\ \\ - 4 .pdf"
);
byte
[] byteBuf =
new
byte
[3 * 1024 * 1024];
byte
[] base64ByteBuf;
int
count1;
//
while
((count1 = file1.read(byteBuf)) != -1) {
if
(count1 != byteBuf.length) {
// 3*1000, , byteBuf
byte
[] copy = Arrays.copyOf(byteBuf, count1);
// byteBuf
base64ByteBuf = Base64.encodeBase64(copy);
//
}
else
{
base64ByteBuf = Base64.encodeBase64(byteBuf);
}
os1.write(base64ByteBuf, 0, base64ByteBuf.length);
os1.flush();
}
file1.close();
System.
out
.println(os1.toString());
상기 코드는 인코딩된 데이터를 컨트롤러에 출력합니다.사실 가장 좋은 것은 파일을 세그먼트로 인코딩하고 세그먼트로 출력하는 것이다. 이렇게 하면 파일이 아무리 크더라도 인코딩할 수 있고 OOM이 되지 않는다.다음은 txt 문서로 파일을 출력하는 것입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ByteArrayOutputStream os1 =
new
ByteArrayOutputStream();
InputStream file1 =
new
FileInputStream(
"D:\\ \\ - 4 .pdf"
);
byte
[] byteBuf =
new
byte
[3 * 1024 * 1024];
byte
[] base64ByteBuf;
int
count1;
//
File file =
new
File(
"D:\\1.txt"
);
while
((count1 = file1.read(byteBuf)) != -1) {
if
(count1 != byteBuf.length) {
// 3*1000, , byteBuf
byte
[] copy = Arrays.copyOf(byteBuf, count1);
// byteBuf
base64ByteBuf = Base64.encodeBase64(copy);
//
}
else
{
base64ByteBuf = Base64.encodeBase64(byteBuf);
}
FileUtils.writeByteArrayToFile(file, base64ByteBuf,
true
);
// ,
os1.flush();
}
file1.close();
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ssh를 통해 이미지 데이터와 같은 바이너리를 서버로 보냅니다.ssh로부터 웹 컨텐츠 등을 편집하고 있을 때, 약간의 화상을 서버상에 보내고 싶을 때가 있다. 또 하나 콘솔을 열어 거기에서 scp하거나 전송용의 어플리케이션을 기동하거나 해도 괜찮지만, 괜찮다. 몇 대의 서버를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.