Cách thích hợp để chuyển đổi một byte [] thành chuỗi Base64 trong Java là gì? Tốt hơn là Grails/Groovy vì nó cho tôi biết rằng hàm encodeAsBase64()
không được chấp nhận. Gói sun.misc.BASE64Encoder
không được khuyến nghị sử dụng và xuất ra một chuỗi kích thước khác trên một số nền tảng Windows.Mã hóa Base64 trong Java/Groovy
22
A
Trả lời
12
Apache Commons có thêm nhiều tiện ích:
Binary Package: http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html
Download: http://commons.apache.org/codec/download_codec.cgi
2
Bạn có thể sử dụng mã nguồn mở Base64Coder thư viện
import biz.source_code.base64Coder.Base64Coder
@Grab(group='biz.source_code', module='base64coder', version='2010-09-21')
String s1 = Base64Coder.encodeString("Hello world")
String s2 = Base64Coder.decodeString("SGVsbG8gd29ybGQ=")
76
Cách ưa thích để làm điều này trong groovy là:
def encoded = "Hello World".bytes.encodeBase64().toString()
assert encoded == "SGVsbG8gV29ybGQ="
def decoded = new String("SGVsbG8gV29ybGQ=".decodeBase64())
assert decoded == "Hello World"
0
Thực hiện phương pháp riêng của bạn như thế này :)
public class Coder {
private static final String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/";
public static String encodeAsBase64(String toEncode) {
return encodeAsBase64(toEncode.getBytes())
}
public static String encodeAsBase64(byte[] toEncode) {
int pos = 0;
int onhand = 0;
StringBuffer buffer = new StringBuffer();
for(byte b in toEncode) {
int read = b;
int m;
if(pos == 0) {
m = (read >> 2) & 63;
onhand = read & 3;
pos = 1;
} else if(pos == 1) {
m = (onhand << 4) + ((read >> 4) & 15);
onhand = read & 15;
pos = 2;
} else if(pos == 2) {
m = ((read >> 6) & 3) + (onhand << 2);
onhand = read & 63;
buffer.append(base64code.charAt(m));
m = onhand;
onhand = 0;
pos = 0;
}
buffer.append(base64code.charAt(m));
}
while(pos > 0 && pos < 4) {
pos++;
if(onhand == -1) {
buffer.append('=');
} else {
int m = pos == 2 ? onhand << 4 : (pos == 3 ? onhand << 2 : onhand);
onhand = -1;
buffer.append(base64code.charAt(m));
}
}
return buffer.toString()
}
}
Các vấn đề liên quan
- 1. Mã hóa/giải mã base64
- 2. Phát hiện mã hóa base64
- 3. Hình ảnh mã hóa Base64
- 4. Cách mã hóa base64 bên trong javascript
- 5. Mã hóa base64 trong mẫu Freemarker
- 6. Mã hóa và giải mã Base64 trong oracle
- 7. C# để mã hóa Ruby sha1 base64
- 8. get SecKeyRef từ base64 mã hóa chuỗi
- 9. Cách mã hóa Base64 trên iPhone
- 10. Chuỗi được mã hóa Base64 thành tệp
- 11. Mã hóa tệp hình ảnh với base64
- 12. Làm cách nào để giải mã chuỗi mã hóa base64?
- 13. base64 mã hóa các chuỗi unicode trong python 2.7
- 14. Force dán kiện để mã hóa hình ảnh trong base64
- 15. Chuỗi mã hóa URL hoặc Base64 trong La bàn/SASS
- 16. Làm cách nào để mã hóa chuỗi Dart trong base64?
- 17. Cách mã hóa base64 hình ảnh trong javascript
- 18. Mã hóa và giải mã bằng mã hóa AES và Base64
- 19. Các ký tự được mã hóa Base64 Ký tự
- 20. Xác thực hình ảnh được mã hóa base64
- 21. Mã hóa phông chữ Base64 cho Tumblr trên Firefox
- 22. Tệp HTTP POST'ed có được mã hóa base64 không?
- 23. Tại sao base64 mã hóa khóa ủy quyền API?
- 24. mã hóa Base64 sử dụng tăng ném ngoại lệ
- 25. Đọc và mã hóa base64 một tệp nhị phân
- 26. Mã hóa và giải mã đối tượng bitmap trong chuỗi base64 trong Android
- 27. Base64 Mã hóa một tệp PDF bằng C#?
- 28. base64 mã hóa hình ảnh mà không lưu
- 29. base64 được mã hóa hoạt ảnh gif làm nền css?
- 30. Kích thước hình ảnh được mã hóa base64
Vấn đề với điều này là 'encodeBase64' đặt dòng một dòng kết thúc trong mỗi 76 ký tự mà messes lên theo chiều dài của chuỗi. Tôi đã kết thúc bằng cách sử dụng 'def encoded = byteArray.collect {nó như char}' thay vì mã hóa Base64. –
Theo mặc định, groovy không chèn thêm dòng mới trong mã hóa, kể từ phiên bản 1.6.0. Gọi 'encodeBase64 (true)' cho phép hành vi đó. – ataylor
+1 cho một giải pháp đơn giản, ngắn gọn mà tôi có thể sử dụng trong một kịch bản nhanh chóng (không có bất kỳ deps lib) tôi cần phải kiểm tra một số điều :-) – jpswain