java 字节流读取图片,字符流读取,二进制读取

java读取图片文件流 java读取本地图片文件获取流!java读取本地图片文件获取流! 立即下载
这两天在学习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

黑马程序员Pink的javaScript课程APIday4 本文摘要:介绍了JavaScript中日期对象的实例化方法(有参/无参)及三种获取时间戳的方式。讲解了DOM节点操作,包括节点查找(父、子、兄弟节点)、增加/克隆/删除节点的方法。详细说明了移动端touch事件和Swiper插件的使用,包括自动播放和小圆点配置。最后提及学成在线案例中表单验证和取消默认跳转的实现。 阅读详情

相关推荐

在 Windows 上使用 Anaconda 创建 配置 YOLOv8虚拟环境,并更改 pip 源以及以 可编辑模式 安装ultralytics

前往 NVIDIA cuDNN 下载页面,下载与您安装的 CUDA 版本匹配的 cuDNN 版本。:根据您的系统和 CUDA 版本,选择适当的 whl 文件。如下12.7,表示最高可装12.7版本CUDA,与上图中的支持的最高cuda版本一致。,无需重新安装,从而大幅提升开发效率,适用于项目开发、调试或依赖本地未发布的版本时使用,但需确保当前目录包含。:访问 NVIDIA 官方网站,下载与您的显卡和操作系统兼容的 CUDA 版本。首先,确保NVIDIA 显卡支持 CUDA,并安装相应版本的驱动程序。

weixin_44115575的博客 1893

java io 之 图片传入字节数组,再从字节数组输出图片【练习】

import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; .

重度懒癌患者的博客 625

CloudFlare CDN优化延迟

这两天在倒腾一个小网站,因为刚注册的域名还没来得及备案,所以就解析到了国外的服务器临时撸代码。为了防止不必要的麻烦,所以在前端套了CloudFlare,但是延迟就比较感人了,通常在150+左右还时不时的抽风,所以就找了点资料来优化一下这个延迟问题。然后再新增一些CloudFlare的亚太地区节点ip的A解析,有耐心的可以分为电信线路和联通线路,我比较懒,所以只分了境内和默认。众所周知CloudFlare是智齿cname解析的,那么我们今天就要用到这个办法了,这里要注意一下,默认的解析是不能动的。

Zuozi - 网络从业者长见识就来Zuozi.NET 1083

java 读取图片成二进制流

通过以上步骤,我们可以使用Java代码读取图片文件并将其转换为二进制数组。这对于处理或传输图片数据非常有用,比如上传图片到服务器、将图片转换为Base64编码等。希望本文对你理解如何读取图片成二进制流有所帮助。如果你有任何问题或疑惑,请随时提问。

牛肉胡辣汤 3738

电子取证之服务器取证思路

服务器取证是一个技术性很强的领域,涉及到多个环节,包括网站重构、网站代码分析、容器分析等。数据库密码的获取通常通过查看配置文件、日志文件、备份等途径,同时可以通过一些绕过技术如禁用身份验证来获取权限。对于不同的数据库,需要根据其特性采取相应的应对方法和命令。

2401_84830066的博客 2489

SAP BOM反查(可追溯值至顶级)

功能介绍:BOM层数在7层以内的(含7层)的物料,执行后都可以查询到顶级的BOM,逻辑很简单,后期如BOM层数增加,可自行增加查询逻辑。 *&---------------------------------------------------------------------* *& Report ZBOM_CHECK *&---------------------...

SAP阿狸 6060

用JAVA读取图片的三种方式

JAVA读取图片

weixin_43353685的博客 6077

基于 STM32 单片机的实验室多参数安全监测系统设计与实现

本系统以 STM32F103C8T6 单片机为核心,集成温湿度监测、烟雾检测、气体泄漏报警、人体移动监测等功能模块,通过 OLED 显示屏实时显示数据,并支持 Wi-Fi 远程传输。系统可对实验室异常环境参数(如高温、烟雾、燃气泄漏)及非法入侵实时报警,保障实验室安全。本文从硬件选型、电路设计到软件实现提供了完整的实验室安全监测系统方案,可根据实际需求调整传感器类型和通信方式,适用于科研、教学等场景的环境安全防护。:可增加继电器模块控制通风设备或切断电源,集成 ZigBee 组网实现多实验室联动监测。

weixin_42300449的博客 1285

java接收图片字节流_java连续发送和接收几张图片字节流

发送端部分代码如下:OutputStreamout_stream_send=CliSocket.getOutputStream();for(intnum=0;num<3;num++){//for循环三次,分别打开Images文件夹下三张图片:0.JPG1.JPG2.JPGFileInput...发送端部分代码如下:OutputStream out_stream_send = CliSocke...

weixin_39714113的博客 1032

Raspberry Pi 4B 蓝牙串口(SPP)配置与使用

Linux、Android、Windows 等操作系统带有在引导期间启动的蓝牙守护进程/蓝牙服务。 对于与监视器连接并使用 GUI(如 GTK 等)运行的设备,只需多次单击即可轻松启用并连接到附近的设备。 但是在无头设备的情况下,我们必须依赖于需要在命令行上运行的不同命令。 这篇博客我们将讨论如何在无头树莓派上通过蓝牙设备连接附近。

视觉与物联智能 2745

如何使用Google Maps API爬取地理数据:详细教程与Python实现

Google Maps API 是一组服务的集合,允许开发者访问地图、地点、路线等地理信息。:将地址转换为地理坐标,或将地理坐标转换为地址。:计算两点之间的行车路线、步行路线等。Places API:获取附近的地点、商店、餐馆等。:计算多个地点之间的距离和时间。在接下来的代码中,我们将结合这些 API,展示如何获取并处理地理数据。本文详细介绍了如何使用 Google Maps API 获取地理数据,涵盖了从地址转经纬度、获取地点详情、计算路线、计算多个地点的距离与时间等多个功能。

2201_76125261的博客 733

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

将做工程过程中比较好的一些内容段做个备份,下面的资料是关于 java分别通过字节流、字符流、二进制读取文件的内容,应该是对小伙伴们有些用途。public class Start{public static void main(String args[]) throws Exception{File sf = new File("H:/javapro/files/source.jpg");File ...

weixin_29001683的博客 1753

ASPICE标准快速掌握「1.1. 简介」

ASPICE是汽车软件过程改进能力模型(Automotive SPICE,Automotive - Software Process Improvement and Capability dEtermination)的缩写,是一种针对汽车软件开发过程的国际标准。该标准旨在帮助汽车制造商和供应商改进其软件开发过程,以确保其软件产品的质量和安全性。需要做什么为什么要做技术上的依赖性是什么。

雪云飞星的博客 2292

Java中字符流和字节流的区别

字符流是用于传输字符数据的流,可以表示为或者CharacterStream。字符流可以处理任意类型的字符数据,包括ASCII码、Unicode码等。字符流的一个重要方法是read(),它可以从流中逐个读取字符,并将其转换为字符数组或字符串。字节流是用于传输字节数据的流,可以表示为或者ByteStream。字节流可以处理任意类型的字节数据,包括整数、浮点数、布尔值等。字节流的一个重要方法是read(),它可以从流中逐个读取字节,并将其转换为数组或二进制数据。

qq_43205309的博客 1589

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【转】为什么不能使用字符流读取非文本的二进制文件?

读取文件 刚学Java的IO流部分时,书上说只能使用字节流去读取图片、视频等非文本二进制文件,不能使用字符流,否则文件会损坏。所以我就一直记住这一点了,但是为什么不能使用,这一直是我的一个疑惑。今天,我又想到了这个问题,所以干脆就一鼓作气把它解决了吧。 先来看一个关于图片复制的代码示例:注意:我的电脑是存在 D:/DB这个路径的,如果你没有,DB这个文件夹,必须建立一个。 package dragon; import java.io.BufferedInputStream; import java

sinolover的专栏 901

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java字节流读取文件_字节流读取文件 java的几种IO流读取文件方式

java字节流怎么读取数据字节流读取数据例子如下: import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/** * 复制文件 * @author young ...

weixin_42551028的博客 2593

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java 文件操作字符流、字节流

一、 字符流 字符流主要是写入字符串的,在本地读写txt文件时常用。 1.写文件 把D盘下的mzd.txt文件的所以内容读出来并显示到屏幕上 2.读文件 二、 字节流 以字节为单位读取文件,常用于读二进制 文件,如图片、声音、影像等文件。 1.网页下载图片 字节流可以传输所有类型的文件。在网络上传输图片等文件常用。 ...

路漫漫其修远兮,吾将上下而求索。 254

java 基础字节字符流 文件读入读出

文件读入读取一般可以分为四个步骤 1.File类的实例化 2.FileReader流的实例化 3.读取的操作 4.资源关闭 1.字符流读入文件 用字符流读取hello.txt下的内容,文件有可能不存在,在创建FileReader的时候可能抛异常,下面释放资源要记得先判断存在与否 方法一:一个一个字符读取,效率慢。 import java.io.*; public class Solution { public static void main(String[] args){

lx18303916的博客 722

Java 字节流和字符流

java处理文件的类里面,stream结尾都是采用字节流,reader和writer结尾都是采用字符流。两者的区别就是读写的时候一个是按字节读写,一个是按字符。 字符流的底层就是字节流。而字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容。而字节流读取单位为byte.byte作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等...

见习程序员的成长之路! 275

字节流与字符流

获取某个文件下的文字:     File file = new File("C:/a.txt");    //获取文件的地址   InputStream in = null;   BufferedReader br = null;   InputStreamReader is = null;   try {    in = new FileInputStream(fs);    is

mtd540819的博客 255

高级IO流--I/O基本原理——Java

java.io包中定义了多个流类型来实现输入/输出功能。 节点流:从一个特定的地方(节点)读写数据,例如磁盘或者一块内存。例:FileReader,提供read()处理单个字符 处理流:对一个已存在的流的连接和封装,通过所封装的流的功能调用数据读/写的功能。例:BufferReader,提供readLine()处理一行数据。 还可分为字符流和字节流: 实例练习: 注:io流的相关操作可能会抛出捕获异常,要在try块中使用。 ...

Java学习 430

IO流学习总结(下)---字符流

字符流:顾名思义就以字符的形式读写文件的 单位是char 其实内部也是通过字节二进制来操作的 只是它内部多了个编码和解码的功能 比如write一个字符的时候Java虚拟机会自动编码 reader的时候又会自动解码 重点:操作是以字符为单位 记住字符流和字节流的唯一区别就是一个是对char进行操作 一个对字节进行操作 返回的其实都是int类型 首先看一下写入: Read...

qq_38409944的博客 248
上一篇: sessionFactory hibernate的核心接口之一 转自 百度百科
下一篇: 关于Eclipse的一些基本配置
tristan-k
博客等级 码龄16年 11粉丝 22原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值