这两天在学习java中如何对文件进行读取,首先当然是对最简单的文件txt文件进行操练了。并且,逐渐的了解了Java中IO流是如何对文件进行操作的

操练了一段时间,便开始了对图片进行读取,开始的想法如下:图片也是一种文件,我大可以用FileInputStream类对其进行操作。并且我用这种方法进行测试的时候是可以的(需要注意,将一个图片文件读取到一个byte[]中,再从这个byte[]中向一个图片文件写入的时候,应该调用write(byte[],offset,length)这个方法,否则是不可以把流写进另一个图片文件的)。

问题在接下来的操作中出现了

因为我开始对文件进行读取首先是对于txt测试,首先是字节流,其次是字符流,到了图片这块儿,我也潜意识按照这种方法来操作,结果我通过很多次网上搜索和查看API发现,我极有可能是走进了一个自己给自己设计的很大的疑惑内:图片,可以用字符流来读取到程序里么?

(加一段:

字符流是官方对字节流的一种封装,一种简化,其目的为了令开发者更加好的读取文本。而图片,其存储方式可以理解为字节流的方式,因此,用字符流读取图片是一种自己给自己挖坑然后跳进去再想办法跳出来的行为。因此,用字符流读取图片,这种模式不好的。给大家带来的麻烦,深表歉意!

)

首先,在Java中,提供了四种类来对文件进行操作,分别是InputStream   OutputStream   Reader  Writer ,前两种是对字节流的操作,后两种则是对字符流的操作。

那么,什么是字节流,什么又是字符流呢?

所有的文件在计算机的存储,从物理上看,其实都是二进制的01码。也就是说,字节流和字符流只是在逻辑上对文件的区分。这两种流到底哪里不同呢?编码方式不同。

到此,不再继续分析编码的详细,咱的知识也还没有那么深。

继续回到原来的图片问题,可以用字符流来读取图片么?我测试着没有成功,我也一直期待这种方法的出现

朋友告诉我,可以用二进制文件读取图片 ,我当时懵了,二进制读取图片,怎么听起来那么别扭呢

又开始在网上搜索,最后,也是在csdn上看到了一篇文章,对于我的帮助很大,以我的需要和我的认知程度看,二进制文件读取图片,其实就是用字节流读取图片。

至此,我觉得用二进制文件读取图片这个问题已经解决,其实就是用Java中提供的对字节流操作的类去操控图片文件

十分抱歉 我没有 附代码和运行截图,现在补上:

import java.io.*;
import javax.swing.*;
public class Start
{public static void main(String args[]) throws Exception{//源文件,必须存在,路径可选File sf = new File("H:/javapro/files/source.jpg"); //目的文件,因为要向其中写入,指定文件可以不存在,由程序生成File df = new File("H:/javapro/files/dest.jpg");new ReadWriteGra(sf,df);new UseGra(df);}
}class ReadWriteGra
{FileInputStream in = null;FileOutputStream out = null;public ReadWriteGra(File sourceFile,File destFile) throws Exception{byte[] buf = new byte[1024];int len = 0;in = new FileInputStream(sourceFile);out = new FileOutputStream(destFile,true);while( (len = in.read(buf)) != -1 ){out.write(buf,0,len);}out.close();}
}
class UseGra extends JFrame
{public UseGra(File picFile) throws Exception{this.setVisible(true);this.setResizable(false);this.setLayout(null);this.setBounds(600, 200, 400, 370);this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);JPanel p1 = (JPanel)this.getContentPane();p1.setOpaque(false);p1.setLayout(null);InputStream is = new FileInputStream(picFile);ByteArrayOutputStream baos = new ByteArrayOutputStream();int b = 0;while((b = is.read())!=-1){baos.write(b);}ImageIcon image = new ImageIcon(baos.toByteArray());JLabel background = new JLabel(image);this.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));background.setBounds(0, 0, image.getIconWidth(), image.getIconHeight());JButton bt = new JButton("Test_Button");p1.add(bt);bt.setBounds(10,10,150,25);validate();}
}

说明,左上部分是程序运行后的文件目录,通过程序,生成了dest.jpg,左下部分是用生成的dest.jpg填充一个jframe的背景,右部分是对程序的运行

编写环境: EditPlus

java 字节流读取图片,字符流读取,二进制读取相关推荐

  1. java读取二进制流文件_java分别通过字节流、字符流、二进制读取文件的代码

    将做工程过程中比较好的一些内容段做个备份,下面的资料是关于 java分别通过字节流.字符流.二进制读取文件的内容,应该是对小伙伴们有些用途. public class Start { public s ...

  2. java编程,字符流BufferedReader,读取一行数据。finally,readLine

    package onelo;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamR ...

  3. java 字符流与字节流区别_JAVA 字符流与字节流的区别

    Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 U ...

  4. java 序列化 byte_java里字符流 字节流和序列化的区别?

    展开全部 Java 流在处理上分为字符e69da5e6ba903231313335323631343130323136353331333337396234流和字节流.字符流处理的单元为 2 个字节的 ...

  5. java字节流分为_Java的流操作分为字节流和字符流两种。

    Java的流操作分为字节流和字符流两种.           1. 字节流  所有的读操作都继承自一个公共超类java.io.InputStream类.  所有的写操作都继承自一个公共超类java.i ...

  6. .dat文件写入byte类型数组_文件字节流、文件字符流、缓冲字节流、缓冲字符流字节数组流、数据流、转换流、对象流...

    一.实操名称: 描述如下流的基本作用:文件字节流.文件字符流.缓冲字节流.缓冲字符流字节数组流.数据流.转换流.对象流二.描述1.文件字节流:包括:FileInputStream,FileOutput ...

  7. 75. InputStreamReader和OutputStreamWriter(转换流--字节流转换成字符流)

    转换流: InputStreamReader   输入字节流转换成输入字符流 OutputStreamWriter  输出字节流转换成输出字符流 总结:就是字节流转换成字符流,但是不能字节流转换成字节 ...

  8. 20170118:File类与IO流,File类,IO流的基本原理,IO流的分类,文件字节流与文件字符流

    一.File类 1.java.io.File类代表系统文件(文件和目录) 访问文件属性步骤 1). 创建文件对象:File file = new File(String pathname); 2). ...

  9. cv2 和 matplotlib.pyplot 和 PIL.Image 读取图片方式对比【Python读取图片】

    文章目录 import matplotlib.pyplot as plt 和 cv2 读取图像对比 PIL 和 cv2 读取图片对比 mxnet.image.imread 读取图片 PIL 和 tor ...

  10. 如何将字节流转换成字符流

    如何将字节流装饰成字符流 使用情况: 当编程时需大量读写,并不知文件格式时,采用字节流进行读写,再进行转换. 将字节流转换成字符流的过程被叫作转换流. 使用装饰者设计模式. 转换流: InputStr ...

最新文章

  1. nginx 内置变量
  2. 什么是无线路由器网络协议?
  3. subtext blog装好了,老外的文档还是写的有些问题
  4. 数据结构严蔚敏算法设计习题解答(逐渐更新)(更新于2020.11.20)
  5. FFmpeg Windows版 官网下载与安装
  6. Flash cs3教程-传统数字动画
  7. 商品订单(增删改查):新增订单;批量删除,发货;模糊查询,下拉菜单内容过滤(含时间);全选反选,列名排序
  8. 高级数理逻辑试卷参考答案
  9. 0811 iOS开发完整学习路线
  10. 2021年危险化学品生产单位安全生产管理人员考试题库及危险化学品生产单位安全生产管理人员最新解析
  11. java后端概述_项目概述
  12. 钉钉企业开发的一些总结
  13. 抖音现在做的竞价推广都是怎么操作的?
  14. add_months()函数介绍
  15. qq令牌码怎么提取_QQ空间怎么引流?
  16. 计算机工资高的岗位,毕业五年后工资最高的4大专业,就业容易岗位多
  17. wifi 无线网一会存在,一会消失,安装驱动也没用(笔记本)
  18. 英属哥伦比亚大学计算机科学专业,加拿大英属哥伦比亚大学计算机专业解析
  19. 中国电信云android面试,中国电信面试经历
  20. 课堂笔记(7) Model fit and variable selection 模型拟合和变量选择 —— Adjusted ​R^2、Cp、全子集回归

热门文章

  1. 怎么拼魔方6个面方法_魔方怎样拼好六个面
  2. Web+FLEX+BLAZEDS
  3. 体育测试一般测什么软件,体能测试有哪些项目 体能测试具体测什么
  4. 背阔肌(01):引体向上
  5. 【JS 逆向百例】吾爱破解2022春节解题领红包之番外篇 Web 中级题解
  6. 一个大专java程序员找工作过程(1)
  7. 3D Deeply Supervised Network for Automatic Liver Segmentation from CT Volumes
  8. python卸载模块的方法汇总_Python卸载模块的方法
  9. openshift origin 用户权限创建
  10. 浅谈灵敏度、分辨率、精度