精华内容
下载资源
问答
  • 作业要求补全附件中的程序ConvertUtil类。 说明:完成字节数组BASE64编码、字节数组与十六进制的转换
  • 图片文件Base64编码字节数组字符串互转
  • 文件转换为字节数组

    2018-11-23 16:32:44
    要求对上传的升级文件进行解析,截取各项数据存入数据库中,方便以后进行访问读取,下发升级的参数。 ![需要上传的文件的十六进制格式]...

    *提出问题

    要求对上传的升级文件进行解析,截取各项数据存入数据库中,方便以后进行访问读取,下发升级的参数。
    

    需要提前了解的技术

    1. sha256加密
      sha256是sha2下的一个延伸加密方式,他的本质其实就是一个哈希函数,一般用到sha256的地方就是对于一个文件进行加密,当然,sha256也可以作为一个唯一的序列号用来进行区分。sha256的底层算法,我并没有了解透彻,在使用eclipse进行java项目的开发过程中,使用自带的Sha256,Sha256.getSHA256(buf)这个方法可以将字节数组进行加密存放。

    2. Base64解码
      对于截取的字节数组,我本来采用的是将字节数组转换为String类型的字符串,但是在转换过程中,字节数组中的十六进制类型的0a在String中会被默认为回车键,也就是换行,导致了文件转换之后字节缺失,致使升级失败的问题。后来在网上查看一些帖子,发现问题出在解码上,经过查询,发现使用Base64进行解码问题可以得到解决。

    *解决问题

    代码展示

    1. 对文件进行转换截取
    		//将文件存放在文件缓存区
    		String execute = login.execute(file, request);
    		//将文件转换为字节数组
    		byte[] buf = UtilHelper.getBytesByFile(execute);
    		//将字节数组转换为数组
    		Supplier<Stream<Byte>> stream = () -> Stream.of(ArrayUtils.toObject(buf));
    		//通过截取数组位数,转换之后,输出字符串(当前版本)
    		List<Byte> verList = stream.get().limit(4).collect(Collectors.toList());
    		byte[] ver = ArrayUtils.toPrimitive(verList.toArray(new Byte[verList.size()]));
    		String verRead = String.valueOf(Bytes2UInt(ver));
    		//通过截取数组位数,转换之后,输出字符串(下一版本)
    		List<Byte> nextverList = stream.get().skip(4).limit(4).collect(Collectors.toList());
    		byte[] nextVer = ArrayUtils.toPrimitive(nextverList.toArray(new Byte[nextverList.size()]));
    		String nextVerRead = String.valueOf(Bytes2UInt(nextVer));
    		//通过截取数组位数,转换之后,输出字符串(备注起始)		
    		List<Byte> startIdxList = stream.get().skip(8).limit(4).collect(Collectors.toList());
    		byte[] startIdx = ArrayUtils.toPrimitive(startIdxList.toArray(new Byte[startIdxList.size()]));
    		long startIndex = Bytes2UInt(startIdx);
    		//通过截取数组位数,转换之后,输出字符串(备注)		
    		List<Byte> commentList = stream.get().skip(12).limit((int)startIndex - 12).collect(Collectors.toList());
    		byte[] comment = ArrayUtils.toPrimitive(commentList.toArray(new Byte[commentList.size()]));
    		String commentRead = new String(comment,"utf-8");
    		//通过截取数组位数,转换之后,输出字符串(内容)		
    		List<Byte> dataList = stream.get().skip((int)startIndex).collect(Collectors.toList());
    		byte[] dataRead = ArrayUtils.toPrimitive(dataList.toArray(new Byte[dataList.size()]));
    		//String dataRead = java.util.Base64.getEncoder().encodeToString(data);
    		//String dataRead = new String(data,"utf-8");
    		//通过截取数组位数,转换之后,输出字符串(256加密)		
    		String sha256 = Sha256.getSHA256(buf);
    
    1. 字节左移
     if (buf == null || buf.length > 4) {
               throw new IllegalArgumentException();
            }
            long r = 0;
            for (int i = buf.length - 1; i >= 0; i--) {
                r += (long)(buf[i] << ((buf.length - i - 1) * 8));
            }
    

    代码优化

    优化原因

    如上图,途中红圈的0a为问题所在
    项目采用的是ssm框架,前端界面为html静态页面,前端通过ajax 传送到后端的数据仍是字符串类型的,这个时候,就需要就其进行解码,也就需要用到Base64。

    优化方案

    byte[] decode = java.util.Base64.getDecoder().decode(data);
    
    采用Base64的解码方式进行字符串的解码操作,不会像直接解码那样将0a默认为回车进行操作,这样数据就不会错误了。
    
    展开全文
  • byte[] keyBytes = Base64.decodeBase64(privateKey); 理论上两种都可以转换并且结果都是一样的,但是第一种是不可以对换行符进行识别的,我们粘贴字符串时,如果字符串过长,会需要到换行;或

    一般来说,会有两种方法

    //第一种:
    java.util.Base64
    byte[] keyBytes = Base64.getDecoder().decode(privateKey);
    //第二种:
    org.apache.commons.codec.binary.Base64
    byte[] keyBytes = Base64.decodeBase64(privateKey);
    

    理论上两种都可以转换并且结果都是一样的,但是第一种是不可以对换行符进行识别的,我们粘贴字符串时,如果字符串过长,会需要到换行;或者从数据库中读取过长字符串时会自动换行,这时我们就不可以使用第一种转换了,报错直接转不了,只能使用第二种转换的形式。

    展开全文
  • 在本教程中,我将向您展示两种将图像转换为字节数组并将字节数组转换为图像的不同方法。 首先,Java中的字节类型是一个8位带符号的二进制补码整数。其范围是[-128,127]。字节数组只是字节数组。图像本质上是一个...

    在本教程中,我将向您展示两种将图像转换为字节数组并将字节数组转换为图像的不同方法。

    首先,Java中的字节类型是一个8位带符号的二进制补码整数。其范围是[-128,127]。字节数组只是字节数组。图像本质上是一个文件。因此,任务是将文件转换为数组,以便可以在不同类型的应用程序中更轻松地存储或传输文件。
    1.方法1

    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
     
    import java.util.Iterator;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.imageio.ImageIO;
    import javax.imageio.ImageReadParam;
    import javax.imageio.ImageReader;
    import javax.imageio.stream.ImageInputStream;
     
    public class ConvertImage {
     
        public static void main(String[] args) throws FileNotFoundException, IOException {
        	/ *
        	 * 1.如何将图像文件转换为字节数组?
        	 * /
     
            File file = new File("C:\\rose.jpg");
     
            FileInputStream fis = new FileInputStream(file);
            //创建从文件系统中的文件获取输入字节的
             // FileInputStream用于读取原始字节流,例如图像数据。要读取字符流,请考虑使用FileReader。
     
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            try {
                for (int readNum; (readNum = fis.read(buf)) != -1;) {
                    //写入该字节数组输出流 
                    bos.write(buf, 0, readNum); 
                    System.out.println("read " + readNum + " bytes,");
                }
            } catch (IOException ex) {
                Logger.getLogger(ConvertImage.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            byte[] bytes = bos.toByteArray();
     
            / *
             * 2.如何将字节数组转换回图像文件?
             * /
     
            ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
            Iterator<?> readers = ImageIO.getImageReadersByFormatName("jpg");
     
            // ImageIO是一个类,包含用于定位ImageReaders 
            //和ImageWriters并执行简单编码和解码的静态方法。
     
            ImageReader reader = (ImageReader) readers.next();
            Object source = bis; 
            ImageInputStream iis = ImageIO.createImageInputStream(source); 
            reader.setInput(iis, true);
            ImageReadParam param = reader.getDefaultReadParam();
     
            Image image = reader.read(0, param);
            //得到一个图像文件
     
            BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
            // bufferedImage是要写入的RenderedImage
     
            Graphics2D g2 = bufferedImage.createGraphics();
            g2.drawImage(image, null, null);
     
            File imageFile = new File("C:\\newrose2.jpg");
            ImageIO.write(bufferedImage, "jpg", imageFile);
     
            System.out.println(imageFile.getPath());
        }
    }
    

    2.方法2

    以下是做相同事情的简单版本。它使用BufferedImage类,这是一种更为有效的方法。

    import java.awt.image.BufferedImage;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
     
     
    public class SimpleConvertImage {
    	public static void main(String[] args) throws IOException{
    		String dirName="C:\\";
    		ByteArrayOutputStream baos=new ByteArrayOutputStream(1000);
    		BufferedImage img=ImageIO.read(new File(dirName,"rose.jpg"));
    		ImageIO.write(img, "jpg", baos);
    		baos.flush();
     
    		String base64String=Base64.encode(baos.toByteArray());
    		baos.close();
     
    		byte[] bytearray = Base64.decode(base64String);
     
    		BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray));
    		ImageIO.write(imag, "jpg", new File(dirName,"snap.jpg"));
    	}
    }
    

    在这里插入图片描述

    展开全文
  • 公司需要将音频文件比如mp3文件转换为Base64编码字符串上传,但我这边在测试通过读取Assets文件下的mp3文件,在将FileInputStream转换为byte数组之后,无论将byte数组转换为String还是将数组进行Base64编码,得到的...
  • 1、将图片转为字节字符串,并对其进行Base64编码处理 2、字节数组字符串进行Base64解码并生成图片

    1、将图片转为字节字符串,并对其进行Base64编码处理

    2、字节数组字符串进行Base64解码并生成图片

     

    展开全文
  • 原生 Input 组件获取图片 Base64 编码资源 <input type="file" accept="image/*" @change="selectImg()" ref="file"/> 此处使用 Promise 将上传图片资源 evt.target.result(Base64Data) 放全局变量 import ...
  • scala 字符串转换数组Hex String in Scala denotes value in hexadecimal number system i.e. base 16 number system. Scala中的十六进制字符串表示以十六进制数表示的值,即以16进制数表示的系统。 Example: 例...
  • 作者:程序员小冰,CSDN博客:.../** * @将图片文件转化为字节数组字符串,并对其进行Base64编码处理 * @author QQ986945193 * @Date 2015-01-26 * @param path 图片路径 * @return */
  • 问题引出: 在某些情况下Rest API约定不允许通过流形式直接GET提供到客户端直接展示图片。...这个信息可以放在Base64转图片的在线工具上。转换 { “code”: “200”, “msg”: “操作成功”...
  • 之前没有怎么太熟练的用过EasyExcel 在研究了一番后发现 因为之前大多数都是已流的形式返回给前端 前端去处理,也可能是因为个人流这块的短板 解决了小半天 在Debug中无意查看了源码文件 就有了以下的解决方案 大佬...
  • 废话不多说,直接上工具类代码,请看!!! import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.UnsupportedEncodingException;... * String转换为Bse64 * @param str * @return */
  • 1.字符串转换字节数组 ...2.字节数组转换base64字符串 string base64 = Convert.ToBase64String(array); 3.base64String转换字节数组 byte[] bitArray = Convert.FromBase64String(base64...
  • byte[] bytes;//图片的字节数组 BASE64Encoder encoder = new BASE64Encoder(); String data = “data:image/png;base64,” + encoder.encode(bytes);
  • 字节数组byte[]转为base64字符串

    千次阅读 2019-12-02 11:26:47
    字节数组转为base64字符串 public String byteToBase64(byte[] b){ String image=Base64.getEncoder().encodeToString(b); return image; } base64字符串转为字节数组 public byte[] base64ToByte(String ...
  •  //将图片文件转化为字节数组字符串,并对其进行Base64编码处理 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream
  • Java 字节数据(byte数组)与字符串(Base64字符串、十六进制字符串)之间的相互转换。MD5、SHA-1 等 Hash 值的计算结果通常转换为 16 进制字符串的形式保存。RSA 等算法的密钥通常转换为 Base64 字符串保存。图片也...
  • byte[] cipherText = encrypt(key, ivBytes, message.getBytes(CHARSET)); //NO_WRAP is important as was getting \n at the end String encoded = Base64.encodeToString(cipherText, Base64.NO_WRAP);
  • public static String getBase64Image(byte[] file) { String base64String = null; base64String = Base64.encodeBase64String(file); String fileFormat = getFileFormat(file); ...
  • 字符 字节数组 base64编码介绍

    千次阅读 2016-11-25 18:23:45
    16进制字符串:AA017301 16进制字符串hexString.getBytes():[65, 65, 48, 49, 55, 51, 48, 49] ...对16进制字符串转10进制生成的byte数组进行base64编码:qgFzAQ== ascii: 22307 圣 35806 诞
  • // OpenFileDialog:打开文件对话框。 OpenFileDialog dlg = new OpenFileDialog(); dlg.Multiselect = true; // true:允许选择多个文件;false:只能选择一个文件 dlg.Title = "请选择文件:"; dlg.Filter = "(*....
  • 网上看到的很多文章介绍转成python图片对象的都是通过读取图片文件转换而来,但是并不是所有的业务逻辑都能通过读取图片文件的,如我的客户端使用C#语言动态拍摄图片并传到服务端给python处理,这样服务端的python就...
  • 字节数组转换为String类型, 说一下什么要转换为String呢? JSON所能够发送的数据类型 1、Number 在JavaScript中的双精度浮点格式  2、String 双引号的反斜杠转义的Unicode  3、Boolean true 或 false...
  • C# 字符串与字节数组相互转换

    千次阅读 2017-11-03 08:48:05
    如果直接从System.String类中找到方法进行字符串和字节数组之间的转换,是不太可能的。为了使其之间进行转换,需要借助另外一个类型:System.Text.Encoding。这个类型提供了将C#字符串转换字节数组的方法,也提供...
  • base64转换成byte[]数组

    万次阅读 2017-01-22 15:42:34
    base64转byte[]

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,549
精华内容 19,419
关键字:

文件base64转换为字节数组