`
ruruhuang
  • 浏览: 193268 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

晕,inputstream for get image from internet.

阅读更多
需要网站的favicon保存到数据库中。思路很简单连接internet,然后得到图片的bytes保存到数据库的blob字段就行。但是我却在取到图片的bytes上面浪费了许多时间。

开始的代码如下
    boolean fetched = false;
        URL url = null;
        try {
            url = new URL("http://" + channel.getSite().getHost() + "/favicon.ico");
            HttpURLConnection httpURL = (HttpURLConnection) url.openConnection();
            //httpURL.setConnectTimeout(60*1000);
            httpURL.connect();
            if (httpURL.getResponseCode()==200){
                InputStream is = httpURL.getInputStream();
                int length = is.available();
                byte[] bytes = new byte[length];
                is.read(bytes, 0, length);
                Blob blob = Hibernate.createBlob(bytes);
                ((Image)image).setLocalSmallImage(blob);
                logger.debug("Image URL:[" + url + "] has been fetched.");
                logger.debug("read image size:" + length);
                fetched = true;
            }
        } catch (Exception e)    {
            //ignored
        }
        if (!fetched)
            logger.debug("Fail to fetch Image URL:[" + url + "] ");
在本地上设置断点调试发现一切正常。 但是发不到服务器上却发现数据更本没有保存到进去,或者只保存进去一部分。奇怪!然后log了bytes的长度(logger.debug("read image size:" + length);)。发现这时候的长度为0。上面的代码肯定是有问题。 因为网络延时之类的这里的available根本就不准确。其实这里我们应该像读取一个文件,然后在把他写入另一个文件的操作是一样的。需要先用过inputstream read出bytes, 然后再通过outputstream把bytes输出。 但是这里我们不需要写到文件之类的datasource中。我们需要的只是bytes。我们可以方便的使用ByteArrayOutputStream来存储我们的bytes。

    public static byte[] getAllBytes(InputStream in) throws Exception {
        int chunkSize = 4096;
        byte[] b = new byte[chunkSize];
        int borb = -1;
        ByteArrayOutputStream fos = new ByteArrayOutputStream();
        while ((borb = in.read(b)) != -1) {
                fos.write(b, 0, borb);
        }
        return fos.toByteArray();
    }

分享到:
评论

相关推荐

    System.Drawing.Image.FromStream 出现参数无效的解决方法及图片类型判断

    在.NET框架中,`System.Drawing.Image.FromStream`方法被广泛用于从流中加载图像,例如从网络、内存或文件读取。然而,有时在尝试使用此方法时可能会遇到“参数无效”的异常,这通常是由于流中的数据不正确或格式不...

    delphi.fast.zlib.v.1.21

    CompressionStream.CopyFrom(InputStream, InputStream.Size); CompressionStream.Free; OutputStream.Free; InputStream.Free;// decompress InputFileName := ‘c:image.png.bzip‘; OutputFilename := ‘c:image...

    java.io.Reader 和 java.io.InputStream 的区别

    ### Java.io.Reader与Java.io.InputStream的关键差异解析 在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io....

    JvYaml、SnakeYAML、YamlBeans、JYaml 代码DEMO

    InputStream inputStream = getClass().getResourceAsStream("/example.yaml"); Yaml yaml = new Yaml(); Map, Object> data = yaml.load(inputStream); System.out.println(data); } } ``` 2. SnakeYAML ...

    java读取sqlserver image字段.docx

    ### Java读取SQL Server Image字段知识点详解 #### 一、背景与目的 在数据库应用开发过程中,经常会遇到需要存储图片等二进制数据的情况。SQL Server 提供了`IMAGE`类型来存储大容量的二进制数据。然而,如何有效地...

    Expect工具Expectit.zip

    // the stream from where you read your input data InputStream inputStream = ...; // the stream to where you send commands OutputStream outputStream = ...; Expect expect = new...

    SocketInputStream.java

    深入剖析tomcat第三章SocketInputStream源码 * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/util/StringManager.java,v 1.2 2001/07/22 20:25:14 pier Exp $ * $Revision: 1.2...

    Socket中InputStream的read方法的阻塞特性

    Socket中的InputStream的`read`方法是Java网络编程中一个核心的概念,它在处理客户端与服务器之间的数据传输时起着至关重要的作用。`read`方法的阻塞特性是其设计的一个重要特点,也是理解多线程和并发编程的关键点...

    How-to-Get-an-Image-in-Java.rar_in

    InputStream is = getClass().getResourceAsStream("/image.jpg"); BufferedImage image = ImageIO.read(is); ``` 3. **显示图像** - 在Java GUI中,通常使用`javax.swing.ImageIcon`类来显示图像: ```java ...

    通过jsoup,输入流InputStream爬取图片PaQuPic.rar,有意者入

    5. **下载图片**:使用`HttpURLConnection`或第三方库如Apache HttpClient发送GET请求,获取图片的`InputStream`。然后,创建一个`FileOutputStream`,将`InputStream`的数据写入到本地文件。 ```java URL url = ...

    activiti-image-generator-5.22.0.jar.rar

    InputStream imageStream = imageGenerator.generatePng(bpmnModel, 1.0); ``` 在这个例子中,`repositoryService` 用于获取BPMN模型,`ImageGenerator` 生成PNG图像,而1.0参数代表缩放比例。生成的图像将包含清晰...

    HTTP请求库java-requests.zip

    // send from inputStream InputStream in = ... resp = Requests.post(url).data(in).text(); // multipart 请求, 用于文件上传: Response resp = Requests.post(url).data(map).multiPart("ufile",...

    传智博客jdbc学习案例

    Class clazz = Class.forName(userDaoClass); userDao = (UserDao) clazz.newInstance(); } catch (Throwable e) { throw new ExceptionInInitializerError(e); } } public static DaoFactory ...

    Delphi11.3 安卓调用相册,并将图片放入image中CameraRoll.rar

    在使用Delphi 11.3开发Android应用时,调用设备相册并把选中的图片显示在Image组件上是一个常见的需求。这个压缩包“Delphi11.3 安卓调用相册,并将图片放入image中CameraRoll.rar”提供了一个范例或模板,帮助...

    aspose pdf 10.8.0 for java

    刚开始简单破解了一下。 生成PDF都没问题,后来发现生成... InputStream is = XXX.class.getResourceAsStream("/pdflicense.xml"); license.setLicense(is); is.close(); 其中pdflicense.xml已经包含在jar文件里面

    Java中InputStream类.pdf

    Java中的`InputStream`类是处理字节输入流的核心类,它是所有字节输入流类的超类,位于Java的`java.io`包中。作为抽象类,`InputStream`定义了一系列基本的方法来读取字节数据,这些方法由其子类进行具体实现。`...

    Java将多张图片合成为一张图像.rar

     InputStream imagein2=new FileInputStream("E:/照片/摇头娃娃1.gif");  BufferedImage image=ImageIO.read(imagein);  BufferedImage image2=ImageIO.read(imagein2);  Graphics g=image.getGraphics();  g....

    java网络编程抓取指定网页信息--UrlHtml(java源码)

    String inputStream = null; inputStream = in.readLine(); while(inputStream!=null){ System.out.println(inputStream); inputStream = in.readLine(); } } catch (MalformedURLException e) { /...

    读取Properties文件的六种方法

    ResourceBundle resourceBundle = ResourceBundle.getBundle(bundleName, Locale.getDefault()); System.out.println("Read properties from bundle: " + resourceBundle); } } ``` #### 3. 使用`java.util....

    struts上传图片

    for(String str : fileList.keySet()) if((fileList.get(str)).getFileSize() > 0 && (fileList.get(str)).getFileSize() ) { String fileName = DIRECTORY +"/"+ fileList.get(str).getFileName(); ...

Global site tag (gtag.js) - Google Analytics