精华内容
参与话题
问答
  • public static byte[] loadRawDataFromURL(String u) throws Exception { URL url = new URL(u); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); InputStream is =
    public static byte[] loadRawDataFromURL(String u) throws Exception {
            URL url = new URL(u);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    
            InputStream is = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
    
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
         //缓存2KB
            final int BUFFER_SIZE = 2*1024;
            final int EOF = -1;
    
            int c;
            byte[] buf = new byte[BUFFER_SIZE];
    
            while (true) {
                c = bis.read(buf);
                if (c == EOF)
                    break;
    
                baos.write(buf, 0, c);
            }
    
            conn.disconnect();
            is.close();
    
            byte[] data = baos.toByteArray();
            baos.flush();
    
            return data;
        }

    展开全文
  • 1、我从别的地方能且只能得到一个byte数组和一个文件名,此数组原本是一个doc文件, 2、我现在要将这个数组封装成url下载地址,就是直接在浏览器中输入地址就能直接下载的那种 3、我用的语言是java,服务器是tomcat...
  • 问题介绍: 最近在项目中发现以前早期接口只是把身份证照片存储了起来,而并未解析身份证图片,导致之前早期用户得身份证信息不存在。所以需要写一个工具来实现...(2):综上原因,可以直接从对应的url中的得到此...

    问题介绍:

    最近在项目中发现以前早期接口只是把身份证照片存储了起来,而并未解析身份证图片,导致之前早期用户得身份证信息不存在。所以需要写一个工具来实现自动解析存储的身份证照片然后存入到数据库中。

    思路:

    (1):读取数据库中用户的身份证照片的url然后从网络中下载此文件到本地,然后再进行读取。这种方法笨重,效率低,会产生过多的io操作,所以废弃。
    (2):综上原因,可以直接从对应的url中的得到此文件的二进制流数据进行解析,减少文件io操作。

    示例Demo:

    解析身份证图片采用的是百度的身份证识别sdk,免费版每天有500次的限制,可以自己简单玩一下了,具体使用步骤请参考官方文档。
    官方提供了一个直接传递url得接口,但是我传递之后不知道为什么不能解析,好奇。。。。

    public class Test {
    
        //设置APPID/AK/SK
        public static final String APP_ID = "16995821";
        public static final String API_KEY = "6VnIvPKAdt3mnGE3Xw958Pi5";
        public static final String SECRET_KEY = "32YSXo3ajeIATBGwtscyG1I9OvwQe1Vf";
    
        private static void sample() {
            // 初始化一个AipOcr
            AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
            // 传入可选参数调用接口
            HashMap<String, String> options = new HashMap<>(3);
            options.put("detect_direction", "false");
            options.put("detect_risk", "false");
    
            String idCardSide = "front";
    
            // 参数为本地路径
            //String image = "D:/48336_201808311103257645596.png";
            /*String image = "D:/image_31751_20190809035821634_7871.png";
            JSONObject res = client.idcard(image, idCardSide, options);
            System.out.println(res.toString(2));*/
    
    
            String url = "https://xxxxxx.png";
            //String url = "https://xxxxxx.png";
    
    		//百度提供的直接传递url和解析参数得接口
            /*JSONObject res = client.basicGeneralUrl(url, options);
            System.out.println(res.toString(2));*/
    
            byte[] bytes = getImageByteArray(url);
            if(null == bytes){
                HashMap<Object, Object> map = new HashMap<>(3);
                map.put("code", 0);
                map.put("message", "获取图片二进制数组出现错误");
                System.out.println(map.get("message"));
            }
    
            // 参数为二进制数组
            JSONObject res = client.idcard(bytes, idCardSide, options);
            System.out.println(res.toString(2));
    
        }
    
    
        /**
         * 获取URL图片的二进制数组
         * @param picUrl
         * @return
         */
        private static byte[] getImageByteArray(String picUrl) {
            ByteArrayOutputStream outputStream = null;
            InputStream inputStream = null;
            try {
            	//通过url获取连接之后读取
                URL url1 = new URL(picUrl);
                HttpURLConnection connection = (HttpURLConnection)url1.openConnection();
                connection.setRequestMethod("GET");
                connection.setConnectTimeout(5 * 1000);
                inputStream = url1.openStream();
                outputStream = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, len);
                }
    
                inputStream.close();
                return outputStream.toByteArray();
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if(null != outputStream){
                    try {
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(null != inputStream){
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }
    
        public static void main(String[] args) {
            sample();
        }
    }
    

    返回值如下:

    {
      "log_id": 6277781237268xxxx,
      "words_result": {
        "姓名": {
          "words": "肖xx",
          "location": {
            "top": 52,
            "left": 121,
            "width": 51,
            "height": 18
          }
        },
        "民族": {
          "words": "汉",
          "location": {
            "top": 90,
            "left": 203,
            "width": 11,
            "height": 14
          }
        },
        "住址": {
          "words": "湖北省荆门市xxxx",
          "location": {
            "top": 159,
            "left": 119,
            "width": 171,
            "height": 39
          }
        },
        "公民身份号码": {
          "words": "42232319xxxx",
          "location": {
            "top": 245,
            "left": 183,
            "width": 238,
            "height": 22
          }
        },
        "出生": {
          "words": "xxx",
          "location": {
            "top": 124,
            "left": 117,
            "width": 137,
            "height": 14
          }
        },
        "性别": {
          "words": "男",
          "location": {
            "top": 90,
            "left": 119,
            "width": 10,
            "height": 15
          }
        }
      },
      "words_result_num": 6,
      "image_status": "normal"
    }
    
    

    百度接口对于身份证的解析有时候会丢失一些数据(可能跟照片的清晰度,角度,生僻字和光线?有关),比如身份证有效期未识别出,姓名为空。。。所以再实际开发中我们应该仔细校验所需参数是否已经解析完成,如果没有就应该让用户从新拍摄更清晰的照片(我这都是之前项目埋得坑。。。)

    展开全文
  • JAVA将URL图片地址转换成byte[]数组

    千次阅读 2020-04-28 09:42:04
    然后后端需要吧这个地址转换成byte[]数组进行开发 代码如下 FileUtil 工具类 传入一个图片地址即可 /** * 得到文件流 * @param url 网络图片URL地址 * @return */ public static byte[] getFileStream(String ...

    在开发过程中,经常需要用到前端传一个图片网络地址。然后后端需要吧这个地址转换成byte[]数组进行开发
    代码如下
    FileUtil 工具类
    传入一个图片地址即可

    图片地址转换成byte[]

        /**
         * 得到文件流
         * @param url  网络图片URL地址
         * @return
         */
        public static byte[] getFileStream(String url){
            try {
                URL httpUrl = new URL(url);
                HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
                conn.setRequestMethod("GET");
                conn.setConnectTimeout(5 * 1000);
                InputStream inStream = conn.getInputStream();//通过输入流获取图片数据
                byte[] btImg = readInputStream(inStream);//得到图片的二进制数据
                return btImg;
            } catch (Exception e) {
               e.printStackTrace();
            }
            return null;
        }
    
       /**
       * 从输入流中获取数据
       * @param inStream 输入流
       * @return
       * @throws Exception
       */
       public static byte[] readInputStream(InputStream inStream) throws Exception{
         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
         byte[] buffer = new byte[1024];
         int len = 0;
         while( (len=inStream.read(buffer)) != -1 ){
             outStream.write(buffer, 0, len);
         }
         inStream.close();
         return outStream.toByteArray();
       }
    

    Base64 字符转换成byte[]

    直接使用java.util的包里面的Base64即可

     Base64.getDecoder().decode(imageBase64); //base64转byte[]
    

    byte[] 字符转换成Base64

    直接使用java.util的包里面的Base64即可

     Base64.getEncoder().encodeToString(byteArray);
    
    
    展开全文
  • java 面试题 总结

    2009-09-16 08:45:34
    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector...
  • // 得到输入流 InputStream inputStream = conn.getInputStream(); // 获取自己数组 byte[] getData = readInputStream(inputStream); // 文件保存位置 File saveDir = new File(savePath); if (!...
  • 最近在后台得到byte数组流,转成string后看是base64编码: ![图片说明](https://img-ask.csdn.net/upload/201607/21/1469080699_466517.png) 然后这个base64应该怎么处理?目前想法是转成image存在本地,但是用百度...
  • 1 利用图片的路径,得到图片的字节数组 public static byte [] getImage(String path) throws Exception{ URL imageUrl=new URL(path); HttpURLConnection connection=(HttpURLConnection)imageUrl.open...

    本篇博文Deprecated 最新文章请参见 I/0流的梳理和小结



    1 利用图片的路径,得到图片的字节数组


     public static byte [] getImage(String path) throws Exception{
              URL imageUrl=new URL(path);
      	  HttpURLConnection connection=(HttpURLConnection)imageUrl.openConnection();
        	  connection.setConnectTimeout(5000);
        	  connection.setRequestMethod("POST");
        	  if(connection.getResponseCode()==200){
        		 InputStream inputStream=connection.getInputStream();
        		 byte [] imageData=GetResource.readResource(inputStream);
        		 return imageData;
        	 }
        	 return null;
          }



     分析:
    (1)利用URL得到HttpURLConnection connection这样便于资源建立起了联系,且设置connection的属性值
    (2)利用HttpURLConnection connection得到输入流.即可以这么想:此时的图片已经保存到了此输入流inputStream里
    (3)将在输入流里的图片数据输出到字节数组里面.即byte [] imageData=GetResource.readResource(inputStream).如下

    readResource(inputStream)方法如下:

      public static byte[] readResource(InputStream inputStream) throws Exception{
        	ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
        	byte [] buffer=new byte[1024];
        	int len=0;
        	while( (len=inputStream.read(buffer))!=-1){
        		   outputStream.write(buffer,0,len);
        	}
        	inputStream.close();
        	outputStream.close();   	
        	return outputStream.toByteArray();
        }



      分析:
    (1)没有方法可以把输入流里的数据直接放到字节数组里(这句说法不太准确哈),而是要利用ByteArrayOutputStream outputStream
       把在输入流自己把自己的数据读(read())到一个字节数组里面,即inputStream.read(buffer),然后数组里面的数据放入
       输出流ByteArrayOutputStream outputStream里面,即outputStream.write(buffer,0,len);
    (2)待数据全部转移到输入流outputStream里面,此时就可以把输出流的数据全部转换为字节数组,即outputStream.toByteArray();
    (3)在此例子就很好体现了输入流和输出流的使用.
    在输入流相应的API中都是把输入流读取到一个数组中,或者只读取一个字节,或者读取一行
    如FileInputStream类中的方法:
    public int read(byte[] b,int off,int len)从此输入流中将最多 len 个字节的数据读入一个字节数组中
    public int read()从此输入流中读取一个数据字节
    如在BufferedReader类中的方法:
    public String readLine() 读取一个文本行.返回值:包含该行内容的字符串

    在输出流相应的API中都把是字节数组写入此输出流,或者只把数组中的某个位置的数据写入输出流
    如ByteArrayOutputStream类的方法中:
    public void write(byte[] b,int off,int len)将指定字节数组中从偏移量off开始的len个字节写入此字节数组输出流
    public void write(int b)将指定的字节写入此字节数组输出流
    然后我们可以发现:
    (1)可以把输出流里的数据转换为字节数组
    如ByteArrayOutputStream类的方法中:
    public byte[] toByteArray():创建一个新分配的字节数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中。
    (2)可以把输出流里的数据转换为字符串
    如ByteArrayOutputStream类的方法中:
    public String toString():将缓冲区的内容转换为字符串,根据平台的默认字符编码将字节转换成字符。

    有了上面的铺垫就可以更好地理解照片复制:
    package cn.io;
    //FileInputStream和FileOutputStream实现照片
    //注意图片不可以用字符流(如FileReader和FileWriter)拷贝,因为它会去查找字符表
    //在方式二中使用InputStream中的available()方法建立缓冲区
    //这样操作的好处是不用循环操作,直接先全部暂存在一个数组里,然后再全部取出存到目的地

    import java.io.*;
    public class CopyPhoto{
    	public static void main(String[] args) throws Exception{
    		FileInputStream fis=null;
    		FileOutputStream fos=null;		
    			//…………………………………………以下为方式一
    			fis=new FileInputStream("F:\\1.JPG");
    			fos=new FileOutputStream("F:\\2.JPG");
    			byte [] temp1=new byte[1024*1024];
    			int length=0;
    			while((length=fis.read(temp1))!=-1){
    				fos.write(temp1, 0, length);
    				fos.flush();
    			}
    			//…………………………………………以下为方式二
    			fis=new FileInputStream("F:\\3.JPG");
    			fos=new FileOutputStream("F:\\4.JPG");
    			byte [] temp2=new byte[fis.available()];
    			fis.read(temp2);
    			fos.write(temp2);
    			
    			fis.close();
    			fos.close();
    	}
    }



    2 生成位图且利用ImageView进行显示
     byte [] imageData=GetImageResource.getImage(path);
     Bitmap bitmap=BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
     imageView.setImageBitmap(bitmap);

    展开全文
  • IO重要理解及笔记

    2012-11-18 02:50:28
    第一部分:将网路图片显示到...1 利用图片的路径,得到图片的字节数组 public static byte [] getImage(String path) throws Exception{ URL imageUrl=new URL(path); HttpURLConnection connection=(HttpURLCon
  • 读取返回的输入流中的数据,并将其中的数据转换为byte数组 使用InputStream 的read方法以及ByteArrayOutputStream的wirte方法 inputStream.read(buffer) outputStream.write(buffer, 0, len) outputStream....
  • D) byte 题目2:d 如下程序中: (1)public class CharToInt (2){ (3) public static void main(String[] args) (4) { (5) int a,b=10; (6) char c='语'; (7) a=b+c; (8) System.out.println(...
  • 之前我是想把图片以blob的形式全部存数据库的,试了好几种方法都不行,暂时先存文件了,主要是sql语句不支持数组形式存 从网络中下载图片放到手机中,urlpath图片的网络地址, 这个方法是得到图片的二进制数据 ...
  •  ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,...
  • byte[] getData = readInputStream(inputStream); //文件保存位置 File saveDir = new File(savePath); //判断该文件夹是否存在 if(!saveDir.exists()){ //不存在则创建【mkdir():创建一级目录;mkdirs...
  • //得到输入流 InputStream inputStream = conn.getInputStream(); //获取自己数组 ========================这个位置读取大文件就会卡住了。 byte[] getData = readInputStream(inputStream); // ...
  • //里面有一个数组数据,可以用getJSONArray获取数组 JSONArray jsonArray=jsonObject.getJSONArray("data"); for(int i =1;i();i++){ JSONObject item=jsonArray.getJSONObject(i); //得到没个对象...
  • jsp九大内置对象

    2011-10-21 23:25:22
     在某些情况下,当响应客户时,需要将客户重新引导至另一个页面,可以使用Response的sendRedirect(URL)方法实现客户的重定向。例如:  response.sendRedirect("index.jsp");  3、Session对象  (1)什么...
  • 精易模块[源码] V5.15

    2015-03-21 22:03:37
    2、新增“网页_是否为网页”判断地址是否为URL路径。 3、删除“窗口_取进程路径”命令,与窗口_句柄取进程路径() 功能相同。 4、删除“线程_强制结束”命令,与 线程_销毁() 功能相同。 5、修改“窗口_热键注册”...
  • //用一个byte数组接收发送的数据字节 request.ContentLength = buffer.Length; //告诉服务器自己上传的数组长度 request.GetRequestStream().Write(buffer, 0, buffer.Length); //写入请求流从第一位开始...
  • 1. 简述 private、 protected...因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。 47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可...
  • java基础入门教程

    热门讨论 2009-04-29 21:36:10
    第 一 章 Java概 述 § 1.1 Java语 言 出 现 的 背景 、 影 响 及 应 用 前 景 一 、 背 景 最 近 一 年 多 来 ,在 Internet上 出 现 的 特 别 吸 引 人 的 事 件 就是 Ja va语 言 和 用 Java编 写 的 浏 览 器...
  • 后台将调用微信小程序官方接口得到的小程序码不做处理的直接返回给前端,这时前端收到的是一个byte数组,通过console.log的方式得到的是一串乱码,如下所示: 那如何将这个byte数组转换为可在前端展示的图片呢?...
  • 布隆过滤器

    2018-03-08 07:48:53
    有一个Byte数组,数组长度是n。遍历100亿条URL。对URL经过k个哈希,得到k个值,将值对应的下标位置涂黑。得到一个经过处理后的数组。 新给出一个URL值,经过哈希,只要发现k个值中有一个下标没有被涂黑,判断该URL...

空空如也

1 2
收藏数 26
精华内容 10
热门标签
关键字:

url得到byte数组