一、base64图片编解码

基本流程:从网络获取下载一张图片。然后base64编码,再base64解码,存到本地E盘根文件夹下。

import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

import javax.imageio.ImageIO;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

@SuppressWarnings("restriction")

public class Base64ImageUtils {

/**

* 将网络图片进行Base64位编码

*

*@param imageUrl

* 图片的url路径,如http://.....xx.jpg

*@return

*/

public static String encodeImgageToBase64(URL imageUrl) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理

ByteArrayOutputStream outputStream = null;

try {

BufferedImage bufferedImage = ImageIO.read(imageUrl);

outputStream = new ByteArrayOutputStream();

ImageIO.write(bufferedImage, "jpg", outputStream);

} catch (MalformedURLException e1) {

e1.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

// 对字节数组Base64编码

BASE64Encoder encoder = new BASE64Encoder();

return encoder.encode(outputStream.toByteArray());// 返回Base64编码过的字节数组字符串

}

/**

* 将本地图片进行Base64位编码

*

*@param imageFile

* 图片的url路径,如F:/.....xx.jpg

*@return

*/

public static String encodeImgageToBase64(File imageFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理

ByteArrayOutputStream outputStream = null;

try {

BufferedImage bufferedImage = ImageIO.read(imageFile);

outputStream = new ByteArrayOutputStream();

ImageIO.write(bufferedImage, "jpg", outputStream);

} catch (MalformedURLException e1) {

e1.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

// 对字节数组Base64编码

BASE64Encoder encoder = new BASE64Encoder();

return encoder.encode(outputStream.toByteArray());// 返回Base64编码过的字节数组字符串

}

/**

* 将Base64位编码的图片进行解码,并保存到指定文件夹

*

*@param base64

* base64编码的图片信息

*@return

*/

public static void decodeBase64ToImage(String base64, String path,

String imgName) {

BASE64Decoder decoder = new BASE64Decoder();

try {

FileOutputStream write = new FileOutputStream(new File(path

+ imgName));

byte[] decoderBytes = decoder.decodeBuffer(base64);

write.write(decoderBytes);

write.close();

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String [] args){

URL url = null;

try {

url = new URL("http://www.faceplusplus.com.cn/wp-content/themes/faceplusplus/assets/img/demo/9.jpg");

} catch (MalformedURLException e) {

e.printStackTrace();

}

String encoderStr = Base64ImageUtils.encodeImgageToBase64(url);

System.out.println(encoderStr);

Base64ImageUtils.decodeBase64ToImage(encoderStr, "E:/", "football.jpg");

}

}

控制台输出的base64编码后的结果:

查看E盘根文件夹:

二、Redis对象object存储

Redis存储对象数据的时候。要进行对象的序列化与反序列化操作。

package RedisObject;

import java.io.Serializable;

public class Person implements Serializable {

private static final long serialVersionUID = 1L;

private int id;

private String name;

public Person() {

}

public Person(int id, String name) {

super();

this.id = id;

this.name = name;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

package RedisObject;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

public class SerializeUtil {

/**

* 序列化

*

*@param object

*@return

*/

public static byte[] serialize(Object object) {

ObjectOutputStream oos = null;

ByteArrayOutputStream baos = null;

try {

baos = new ByteArrayOutputStream();

oos = new ObjectOutputStream(baos);

oos.writeObject(object);

byte[] bytes = baos.toByteArray();

return bytes;

} catch (Exception e) {

}

return null;

}

/**

* 反序列化

*

*@param bytes

*@return

*/

public static Object unserialize(byte[] bytes) {

ByteArrayInputStream bais = null;

try {

bais = new ByteArrayInputStream(bytes);

ObjectInputStream ois = new ObjectInputStream(bais);

return ois.readObject();

} catch (Exception e) {

}

return null;

}

}

package RedisObject;

import redis.clients.jedis.Jedis;

public class PersonRedisTest {

private static Jedis jedis = null;

/**

* 初始化Jedis对象

*

*@throws Exception

*/

public PersonRedisTest() {

jedis = new Jedis("127.0.0.1", 6379);

}

/**

* 序列化写对象, 将Person对象写入Redis中

*

*/

public void setObject() {

jedis.set("person:100".getBytes(),

SerializeUtil.serialize(new Person(100, "zhangsan")));

jedis.set("person:101".getBytes(),

SerializeUtil.serialize(new Person(101, "bruce")));

}

/**

* 反序列化取对象, 用Jedis获取对象

*

*/

public void getObject() {

byte[] data100 = jedis.get(("person:100").getBytes());

Person person100 = (Person) SerializeUtil.unserialize(data100);

System.out.println(String.format("person:100->id=%s,name=%s",

person100.getId(), person100.getName()));

byte[] data101 = jedis.get(("person:101").getBytes());

Person person101 = (Person) SerializeUtil.unserialize(data101);

System.out.println(String.format("person:101->id=%s,name=%s",

person101.getId(), person101.getName()));

}

public static void main(String[] args) {

PersonRedisTest rt = new PersonRedisTest();

rt.setObject();

rt.getObject();

}

}

执行main函数结果:

查看Redis存储的数据:

三、Redis存储图片

在《Redis入门指南》一书的P22(第22页)中,有这么一段话:

“字符串类型是Redis中最主要的数据类型,它能存储不论什么形式的字符串,包含二进制数据。你能够用其存储用户的邮箱、JSON化的对象甚至是一张图片。”

Redis 是一个数据结构类型的server。不是单纯的 key-value 存储。 Redis 里面的键是二进制安全的(二进制安全是指数据在传输过程中保证数据的安全性,包含加密等),因此键的内容不应该包含空格或者换行符。比方 ”hello world” 和 ”hello world\n” 是错误的。

那么怎么在Redis中存储图片呢?说白了。图片就是一组二进制数据,直接存储二进制数据肯定是不行的,要实现Redis存储二进制数据,那么就得事先实行转化。

在一、二中已经写了图片base64编解码和redis存储对象的过程。那么我们就能够这样子在Redis中来存储图片:

图片转化成String字符串

(1)我们能够在Redis存储图片的base64编码或者解码。以KV格式,K为普通字符串,V为图片的base64编码。get(K)后再base64解码就能够了;

(2)我们也能够在Redis中存储图片的网络url或者本地的path路径,详细实现能够使图片本身存储到磁盘中,然后在Redis中以图片的网络url或者本地的path路径为value(V)值存储。

图片转化成object对象

直接在Redis中存储图片对象。使用Java的序列化/反序列化机制进行处理实现。

redis java 存储图片_Redis 存储图片 [base64/url/path]vs[object]相关推荐

  1. redis映射的概念_Redis存储总是心里没底?你大概漏了这些数据结构原理

    原标题:Redis存储总是心里没底?你大概漏了这些数据结构原理 上一篇文章<Redis存储总用String?你大概错过了更优的使用方法>我们了解了Redis的数据类型特点与适用场景,本期内 ...

  2. redis java 集成视频_redis(6)-java集成二

    使用Jedis框架: 创建maven工程,引入依赖 redis.clients jedis 2.9.0 Demo代码如下: import java.util.HashMap; import java. ...

  3. redis java连接出错_redis连接错误与spring boot

    我使用spring boot框架来连接redis,我得到了错误 Caused by: java.lang.NoSuchMethodError: redis.clients.jedis.JedisSha ...

  4. redis java 发布订阅_Redis之发布订阅(Java)

    上一章节我们已经学会了Redis在Java项目里面最基本的应用,我们这一章节来讲一讲Redis里面一个非常重要的功能:发布订阅 发布订阅(Pub/Sub):目前广泛使用的通信模型,它采用事件作为基本的 ...

  5. java以Blob形式存储,读取图片并在jsp页面显示图片流

    2019独角兽企业重金招聘Python工程师标准>>> 废话少说代码伺候: 封装好的ImageUtil类:目的读取本地的图片文件并存入数据库,然后读出数据库中以Blob形式存储的图片 ...

  6. java实现图片文件存储到数据库

    参见:http://www.cnblogs.com/kakag/p/3145140.html 1.数据表: create table tb_file(-> fid SMALLINT AUTO_I ...

  7. 架构设计:系统存储(20)——图片服务器:需求和技术选型(2)

    (接上文<架构设计:系统存储(19)--图片服务器:需求和技术选型(1)>) 3-5.其它技术选型说明 3-5-1.关于关系型数据库 关于持久化存储的数据库技术要注意一点,实际上它并不是图 ...

  8. 系统存储(19)——图片服务器:需求和技术选型

    1.概述 图片服务系统是各种针对C端系统常见的子系统,它的特点是存储规模大请求频度高,且单张图片的读请求远远高于写请求.后续几篇文章我们将从图片服务系统的需求分析开始,一起来讨论如何进行这类系统的技术 ...

  9. .net 数据存储 mysql_asp.net实现存储和读取数据库图片

    本文实例为大家分享了asp.net存储和读取数据库图片的具体代码,供大家参考,具体内容如下 1. 创建asp.net web窗体项目 代码如下: 上传图片 展示图片 效果图如下: 2. 创建数据库 数 ...

最新文章

  1. 输入字符串,包含数字,大小写字母,编程输出出现做多的数字的和
  2. docker 安装 RabbitMQ
  3. Linux(Ubuntu)下如何解压 .zip 文件
  4. Kafka压力测试(写入MQ消息压测和消费MQ消息压测)
  5. linux下面显示所有正在运行的线程
  6. 英语口语 week14 Friday
  7. unsigned long long 溢出 乘_Java整数相加溢出怎么办?Java8一步搞定
  8. 2008哲思自由软件峰会
  9. cortex a7 a53_西昊人体工学椅A7开箱测评
  10. 小企业如何才能做强做大?
  11. PreferenceActivity之 Subclasses of PreferenceActivity must override isValidFragment(String)
  12. 【STM32】STM32CubeMX使用FreeRTOS教程1----定时器学习
  13. 快递鸟接口国内常用快递公司编码表
  14. 中国台湾研发miniLED技术进展迅速,将给面板技术带来变革
  15. TVS瞬态抑制二极管选型指南
  16. 入门计算机的粗略学习-Day13
  17. VtigerCRM 点击拨号和来电弹屏 PBX Manager Module
  18. MySQL 高可用MMM
  19. 魔方二维动态还原过程MATLAB仿真/魔方二维平面展开
  20. 菜鸟入门:Java程序员学习之路

热门文章

  1. 我在 GitHub 上看到了一个丧心病狂的开源项目!治好了我的拖延症
  2. python3.5全局解释器锁GIL-实现原理浅析
  3. Django源码分析5:session会话中间件分析
  4. Scrapy_redis框架原理分析并实现断点续爬以及分布式爬虫
  5. python列表用法详解(查找、添加、删除、修改、复制、循环遍历、列表嵌套)
  6. 【网络协议】TCP分段与IP分片
  7. 一份火爆国外的PyCharm快捷键和Python代码速查表
  8. 用于手语识别的自注意力机制
  9. EasyTransaction 1.3.0 发布,一站式分布式事务解决方案
  10. 书值 | 第 2 期:成为技术管理者,思维上应该如何转变?