有人问这个问题,说实话我也就是从本地读读(难道和从网页尚读不一样吗?好像区别不大),就写了几个,中间也发现了不少问题。看代码把
package com;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class TestInternet {
Image image = null;
public static void main(String args[]){
TestInternet ti = new TestInternet();
try {
ti.getResource();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getResource() throws IOException {
String urlStr = "http://i3.itc.cn/20101008/394_06b5e5c1_d16a_48d2_9340_86b0c9292732_1.jpg";
URL url = new URL(urlStr);
image = ImageIO.read(url);
int width = image.getWidth(null);
int height = image.getHeight(null);
BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
bi.getGraphics().drawImage(image, 0, 0, width , height, null);
FileOutputStream fos = new FileOutputStream(new File("myPic.jpg"));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode(bi);
fos.flush();
fos.close();
}
}
刚才又写了两种形式 上代码
package com;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
public class DynamicGetURLImage {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//图片的http全路径
String imgurl = "http://i3.itc.cn/20101008/394_06b5e5c1_d16a_48d2_9340_86b0c9292732_1.jpg";
URL url = new URL(imgurl);
BufferedInputStream in = new BufferedInputStream(url.openStream());
//保存的图片文件名
File img = new File("img.jpg");
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(img));
byte[] buf = new byte[2048];
int l = 0;
int temp = 0;
while( (l = in.read(buf)) != -1){
temp =0;
temp += l;
out.write(buf);
}
System.out.println(temp);
in.close();
out.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.yuanlai;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class TestInternet {
public static void main(String args[]){
TestInternet ti = new TestInternet();
try {
ti.getResource();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getResource() throws IOException {
String urlStr = "http://i3.itc.cn/20101008/394_06b5e5c1_d16a_48d2_9340_86b0c9292732_1.jpg";
int ResponseCode = 0;
URL url = new URL(urlStr);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(2 * 1000);
ResponseCode = connection.getResponseCode();
System.out.println(ResponseCode);
if (ResponseCode == 200) {
InputStream inputStream = connection.getInputStream();
byte[] b = readInputStream(inputStream);
inputStream.close();
System.out.println(b.length);
FileOutputStream fos = new FileOutputStream(new File("myPic.jpg"));
fos.write(b);
fos.flush();
fos.close();
}
}
private byte[] readInputStream(InputStream inputStream) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int l = -1;
int temp = 0;
byte [] by = new byte[1024];
//int temp1 = inputStream.read(by);
/**
while (temp1 != -1) {
//baos.write(l);
baos.write(by, 0, temp1);
temp += l;
temp1 = inputStream.read(by);
}
*/
//read(byte[])是从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中
//而read() 是读取下一个字节,
while((l = inputStream.read(by)) >= 0){
baos.write(by, 0, l);
}
return baos.toByteArray();
}
}
看来得写个总结了,
第一种方式可以对图片进行操作,比如放大缩小什么的。
第二种比较简洁,适合做简单的应用的时候用,
第三种有点罗嗦,但你可以操作的东西比较多,比如connection对象等。
还有值得总结的地方就是关于read() 和read(byte[] b)
read() 指的是从输入流读取下一个数据字节。返回 0 到 255 范围内的 int 字节值。如果因已到达流末尾而没有可用的字节,则返回值 -1。
read(byte[] b) 是开辟一块缓存区.“从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数”
read(b) 方法的效果等同于: read(b, 0, b.length)
注意判断的时候 要while((l = inputStream.read(by)) >= 0) 不能while((l = inputStream.read()) >= 0)
分享到:
相关推荐
同样,可以使用 ReadProperty 方法从 Byte() 数组读取图片,并将其显示在图片框中。 代码示例: Dim PBag As New PropertyBag Dim B() As Byte PBag.WriteProperty "Picture", Picture1.Picture B = PBag.Contents...
在C#编程中,将图片转换为byte数组并存储到数据库,然后从数据库读取byte数组再还原为图片,是一种常见的处理方式。这种方式便于在不直接依赖文件系统的情况下管理和传输图像数据。以下是对这个主题的详细说明: 1....
这段代码首先使用`ImageIO.read(file)`方法从给定的文件中读取图片,然后调用`ImageIO.write()`方法将图片写入一个内存中的`ByteArrayOutputStream`,并返回其字节数据。 接下来,我们讨论如何“合并inputStream...
当需要一次性读取多个字节并将它们存储到数组中时,则可以选择`read(byte[] b)`或`read(byte[] b, int off, int len)`。 #### 三、案例分析 假设我们要编写一个程序,该程序需要通过键盘接收两个整数,然后找出这...
在“Byte_Read_Write.rar”这个压缩包中,我们期待找到的可能是一个完整的源码示例,包括了如何在单片机端编写发送读取请求的代码,以及在PLC端接收并处理请求的梯形图或指令表程序。这些源码将有助于读者理解实际的...
`Read`方法接受三个参数:一个缓冲区(`byte[]`),一个缓冲区起始位置(`int`),以及要读取的字节数(`int`)。读取完成后,返回实际读取到的字节数。 ```csharp byte[] buffer = new byte[1024]; // 1KB的缓冲区...
3. 读取文件:使用 FileStream 对象的 Read 方法可以读取文件的内容。在给定的代码中,使用 byte数组来存储读取的数据。 4. 转换字符串:使用 Encoding.ASCII.GetString 方法可以将 byte 数组转换为字符串。 5. 写入...
本文将介绍三种读取Java文件到byte数组的方法,供开发者参考。 ### 方法一:传统IO方式 这种方法是最常见的读取文件的方式,使用`FileInputStream`、`BufferedInputStream`和`ByteArrayOutputStream`组合实现。 `...
一次读一个字节可以使用 read() 方法,而一次读多个字节可以使用 read(byte[] b) 方法。 二、按字符读取文件内容 按字符读取文件内容是指以字符为单位读取文件的内容,这种方式常用于读取文本、数字等类型的文件。...
在C#编程中,将图片文件信息转换成16进制文本是一项常见的任务,这有助于在数据传输、存储或分析时以另一种形式处理图像数据。本文将详细解释如何实现这一过程,以及如何将16进制文本再还原为原始图片。 首先,我们...
本文将详细介绍如何使用C#进行图片的存储和读取,并特别关注大图片的处理方法。 #### 二、准备工作 为了实现图片的存储和读取功能,我们需要引入几个重要的命名空间: - `System.Drawing`:提供了用于创建、绘制和...
根据给定的文件信息,我们可以总结出一系列关于Java中读取文件的方法,这些方法涵盖了不同层次的数据读取,包括字节、字符以及行级别的读取。以下是对这些知识点的详细阐述: ### Java读取文件方法大全:读取File流...
另一种方法是使用内存流(`MemoryStream`)将文件内容全部读取到内存中。这种方式适用于较小的文件,因为较大的文件可能会导致内存溢出等问题。 ```csharp public static byte[] ReadFully(Stream stream) { byte[] ...
本篇文章将详细探讨如何在WPF应用中使用SQLite数据库来存储和读取二进制图片。 一、SQLite简介 SQLite是一款开源、无服务器、零配置、事务性的SQL数据库引擎,适用于嵌入式环境,无需额外的安装或管理。它支持标准...
读取数据库中的图片则需要使用OleDbDataReader,当读取到OLE对象字段时,可以将其转换回Byte数组,然后写入到本地文件或直接显示在界面上。 ```csharp OleDbCommand cmd = new OleDbCommand("SELECT ImageField ...
以上介绍了两种使用C#读取TXT文件的方法:一种是利用`FileStream`直接操作二进制数据;另一种是使用`StreamReader`和`StreamWriter`操作文本数据。两种方法各有优势,选择哪种取决于具体的应用场景和需求。如果只...
在C#编程中,将图片文件读取并存储到数据库是一项常见的任务,这通常涉及到二进制...在实践中,你可能还需要考虑错误处理、数据库连接管理、性能优化以及使用更高级的ORM框架(如Entity Framework)来简化数据库操作。
2. **使用ImageIO.read()**: 要读取图片,首先需要导入`javax.imageio.ImageIO`和`java.awt.image.BufferedImage`。然后,你可以使用`ImageIO.read(file)`方法,其中`file`是一个指向图像文件的`File`对象。例如: ...
例如,在Python中,我们可以使用内置的`open()`函数打开一个文件,并使用`read()`或`readline()`方法来读取内容。对于大文件,为了提高效率,我们通常会采用分块读取,如每1024字节(1KB)为一块进行读取。这样可以...