最近在学习JAVA的IO知识,对书上的一个例子很感兴趣,例子的代码如下:
import java.io.*;
public class WriteBytes {
public static void main(String[] args) {
int[] data={71,73,70,56,57,97,15,0,15,0,128,0,0,
255,255,255,0,0,0,44,0,0,0,0,15,0,15,0,0,2,33,
132,127,161,200,185,205,84,128,241,81,35,
175,155,26,228,254,105,33,102,121,165,201,145,169,
154,142,172,116,162,240,90,197,5,0,59};
try{
FileOutputStream file=new FileOutputStream("pic.gif");
for(int i=0;i<data.length;i++){
file.write(data[i]);
}
file.close();
}catch (IOException e){
System.out.println(e);
}
}
}
运行完后会生成一个上面有个字母J的gif格式的图片.
我就想,是不是图片都可以表示成数组里的那一串数字,然后用字节流写到文件里就可以显示出来了呢?
于是我写一个小程序用FileInputStream把一张小图片读出来,再用BufferedWriter读出来的整数用逗号分隔,写到一个文件data.txt里.打开data.txt文件可以看到一大串整数,然后再写一个小程序用BufferedReader读data.txt,把读取的整数再用FileOutputStream写成一个gif的文件.结果打开生成的这个gif图片里面什么也没有,不能显示原来的图片.想不明白为什么,有没有那位高手可以帮我看看,用什么方法可以让图片能正常显示?
谢谢了.
import java.io.*;
public class WriteBytes {
public static void main(String[] args) {
int[] data={71,73,70,56,57,97,15,0,15,0,128,0,0,
255,255,255,0,0,0,44,0,0,0,0,15,0,15,0,0,2,33,
132,127,161,200,185,205,84,128,241,81,35,
175,155,26,228,254,105,33,102,121,165,201,145,169,
154,142,172,116,162,240,90,197,5,0,59};
try{
FileOutputStream file=new FileOutputStream("pic.gif");
for(int i=0;i<data.length;i++){
file.write(data[i]);
}
file.close();
}catch (IOException e){
System.out.println(e);
}
}
}
运行完后会生成一个上面有个字母J的gif格式的图片.
我就想,是不是图片都可以表示成数组里的那一串数字,然后用字节流写到文件里就可以显示出来了呢?
于是我写一个小程序用FileInputStream把一张小图片读出来,再用BufferedWriter读出来的整数用逗号分隔,写到一个文件data.txt里.打开data.txt文件可以看到一大串整数,然后再写一个小程序用BufferedReader读data.txt,把读取的整数再用FileOutputStream写成一个gif的文件.结果打开生成的这个gif图片里面什么也没有,不能显示原来的图片.想不明白为什么,有没有那位高手可以帮我看看,用什么方法可以让图片能正常显示?
谢谢了.
解决方案 »
- 新学java菜鸟,求大神帮忙!
- 考试继续答案
- JS生成的文本框如何用Struts从JSP上面去得值
- java 面试题:为什么hascode 和 equals 总是成对出现?
- 求助
- 总是出现 Exception in thread " mian" java.lang.NoClassDefFoundError: c:\hellojava 是怎么回事?
- Java 如何实现 IPC 通信呢?
- 急死了上火啊,自己租的两居现在还空一间,求志同道合的朋友合租
- jsp+bean结构,在jsp网页中做了个form,在form被submit之后,我想在bean中实现页面的跳转,请教如何实现
- 一个关于jdk1.3的问题,很奇怪,各位大虾帮忙!
- 如何用java调用OUTLOOK写一个邮件,不要每调用一次就打开一个OUTLOOK 高分求助!!
- 求教addBatch()问题!
2,读到data.txt中的数字是连在一起的还是用什么分隔开来的?
import java.util.*;
public class PToT {
public static List keys=new ArrayList();
public static void pTot(String pName,String tName) throws IOException{
//字节流读取文件
FileInputStream file=new FileInputStream(pName);
FileWriter out=new FileWriter(tName); while(file.read()!=-1){
int input=file.read();
keys.add(Integer.toString(input));
}
for(int i=0;i<keys.size();i++){
String key=keys.get(i).toString();
count++;
if(count%100==0){
out.write(key+"\n");
}
else{
out.write(key+",");
}
}
file.close();
out.close();
System.out.println(count);
}
public static void tTop(String tName,String pName) throws IOException{
BufferedReader in=new BufferedReader(new FileReader(tName));
FileOutputStream out=new FileOutputStream(pName);
String key="";
while((key=in.readLine())!=null){
String[] keys=key.split(",");
for(int i=0;i<keys.length;i++){
int j=Integer.parseInt(keys[i]);
out.write(j);
}
}
in.close();
out.close();
}
public static void main(String[] args) { try{
pTot("3.gif","3.txt");
tTop("3.txt","4.jpg");
}catch(IOException e){
System.out.println(e.getMessage());
}
}}
我写的程序就是这个样子的.
帮我看一下.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Scanner;public class Test {
public static void main(String[] args) throws IOException {
writeGIF("f:/pic.gif");
readGIF("f:/pic.gif", "f:/pic.data");
writeNewGIF("f:/pic.data", "f:/pic_.gif");
} private static void writeGIF(String filename) throws IOException {
int[] data = { 71, 73, 70, 56, 57, 97, 15, 0, 15, 0, 128, 0, 0, 255,
255, 255, 0, 0, 0, 44, 0, 0, 0, 0, 15, 0, 15, 0, 0, 2, 33, 132,
127, 161, 200, 185, 205, 84, 128, 241, 81, 35, 175, 155, 26,
228, 254, 105, 33, 102, 121, 165, 201, 145, 169, 154, 142, 172,
116, 162, 240, 90, 197, 5, 0, 59 };
OutputStream os = new FileOutputStream(filename);
for (int i = 0; i < data.length; i++) {
os.write(data[i]);
}
os.close();
System.out.println("图片生成完成");
} private static void readGIF(String src, String dist) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(dist));
InputStream is = new FileInputStream(src);
int n;
while((n = is.read())!=-1){
bw.write(n + ",");
}
is.close();
bw.close();
System.out.println("图片读取完成");
}
private static void writeNewGIF(String src, String dist) throws IOException {
Scanner scanner = new Scanner(new File(src));
scanner.useDelimiter(",");
OutputStream os = new FileOutputStream(dist);
while(scanner.hasNext()) {
int s = scanner.nextInt();
os.write(s);
}
os.close();
scanner.close();
System.out.println("新图片生成完成");
}
}
int input=file.read();
keys.add(Integer.toString(input));
}改成:int tmp;
while ((tmp = file.read()) != -1) {
int input = tmp;
keys.add(Integer.toString(input));
}知道为什么了吗?
这个有错呀,我把这句话到eclipse里不行.
用 java -version 查看一下。Scanner是JDK1.5新增加的。如果你的JDK版本是1.5以上的,那可能是Eclipse的编译级别低了。菜单Window → Preferences... → Java → Compiler,将 Compiler compliance level 调至 5.0 或以上。
public static List keys = new ArrayList();改为:
public static List<String> keys = new ArrayList<String>();就不会有警告了。
我的JDK版本太低了:java version "1.3.1_01",我去下个新的去.
正在学习JAVA,多谢高手指导了.