java进行图片和字符串的互相转换

本文介绍了如何使用Java进行字符串转图片(通过Base64解码)和图片转字符串(通过Base64编码)的操作,并提供了相关的代码示例。重点在于展示了使用BASE64编码器和解码器在实际开发中的应用。

@Tjava进行图片和字符串的互相转换
/**
* 字符串转图片
* @param imgStr —>图片字符串
* @param filename —>图片名
* @return
*/
public static boolean generateImage(String imgStr, String filename) {

    if (imgStr == null) {
        return false;
    }
    BASE64Decoder decoder = new BASE64Decoder();
    try {
        // 解密
        byte[] b = decoder.decodeBuffer(imgStr);
        // 处理数据
        for(int i = 0; i < b.length; ++i) {
            if (b[i] < 0) {
                b[i] += 256;
            }
        }
        OutputStream out = new FileOutputStream("D:/Systems/"+filename);
        out.write(b);
        out.flush();
        out.close();
        return true;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return false;

}

/**
 * 图片转字符串
 * @param filePath    --->文件路径
 * @return
 */
public static String getImageStr(String filePath) {
    InputStream inputStream = null;
    byte[] data = null;
    try {
        inputStream = new FileInputStream(filePath);
        data = new byte[inputStream.available()];
        inputStream.read(data);
        inputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 加密
    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(data);
}

/*
 * 测试代码
 */
public static void main(String[] args) {
    String imageStr = getImageStr("D:\\001.jpg");
    System.out.println(imageStr);
    boolean generateImage = generateImage(imageStr, "001.jpg");
    System.out.println(generateImage);
}

### Java对象与字符串互相转换的最快方法 在Java中,将对象与字符串进行互相转换通常涉及序列化反序列化过程。以下是几种常见且高效的实现方式: #### 1. 使用FST(Fast-Serialization Toolkit) FST是一个高性能的Java序列化框架,其设计目标是提供比标准Java序列化更快的速度。通过FST,可以将对象快速序列化为字节数组,然后将其转换为Base64编码的字符串以方便传输或存储[^1]。 以下是一个使用FST进行对象与字符串转换的示例代码: ```java import org.nustaq.serialization.FSTObjectInput; import org.nustaq.serialization.FSTObjectOutput; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Base64; public class FSTExample { public static String serialize(Object obj) throws Exception { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); FSTObjectOutput fstObjectOutput = new FSTObjectOutput(byteArrayOutputStream); fstObjectOutput.writeObject(obj); fstObjectOutput.close(); return Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()); } public static Object deserialize(String str) throws Exception { byte[] data = Base64.getDecoder().decode(str); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data); FSTObjectInput fstObjectInput = new FSTObjectInput(byteArrayInputStream); return fstObjectInput.readObject(); } } ``` #### 2. 使用Jackson库 Jackson是一个流行的JSON处理库,能够高效地将Java对象转换为JSON字符串,并支持反向操作。Jackson以其高性能易用性著称[^4]。 以下是一个使用Jackson进行对象与字符串转换的示例代码: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonExample { private static final ObjectMapper objectMapper = new ObjectMapper(); public static String serialize(Object obj) throws Exception { return objectMapper.writeValueAsString(obj); } public static <T> T deserialize(String str, Class<T> clazz) throws Exception { return objectMapper.readValue(str, clazz); } } ``` #### 3. 使用Kryo库 Kryo是一个轻量级、高性能的序列化框架,特别适合于需要快速序列化反序列化的场景。它可以通过配置插件支持Base64编码,从而实现对象与字符串之间的转换。 以下是一个使用Kryo进行对象与字符串转换的示例代码: ```java import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; import java.util.Base64; public class KryoExample { private static final Kryo kryo = new Kryo(); public static String serialize(Object obj) { Output output = new Output(1024, -1); kryo.writeObject(output, obj); output.close(); return Base64.getEncoder().encodeToString(output.toBytes()); } public static <T> T deserialize(String str, Class<T> clazz) { Input input = new Input(Base64.getDecoder().decode(str)); T obj = kryo.readObject(input, clazz); input.close(); return obj; } } ``` #### 性能对比 - **FST**:适用于需要极高性能的场景,尤其是大规模数据的序列化反序列化。 - **Jackson**:适合JSON格式的字符串转换,易于集成到Web应用中。 - **Kryo**:轻量级且高性能,适合对速度有严格要求的应用场景。 每种方法都有其适用场景,选择时需根据具体需求权衡性能、易用性兼容性等因素。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值