当前位置:首页 » 操作系统 » 读取数据库的二进制文件

读取数据库的二进制文件

发布时间: 2023-08-16 12:23:35

1. C语言二进制文件的读取问题

C语言中二进制文件的读取要用fread和fwrite来实现。
fwrite()与fprintf()是不同的。
fwrite将写入的数据作为文件的磁盘内容保存。fprintf将写入的数据的每个字符所对应的ASCII码作为文件的磁盘内容保存。fprintf做了一个转换的工作。
当打开文件时,记事本会自动把文件的磁盘内容作为ASCII码转换成对应的字符,然后再显示出来,即显示的是文本内容而不是磁盘内容。
例如,用fwrite向文件写入“65”时,文件的磁盘内容就是保存的65(磁盘上以二进制表示)。当用记事本打开文件时,记事本会读到65,并把65看作一个ASCII码,再把对应的字符“A”显示出来。因此屏幕上看到的文本内容是“A”。
而用fprintf向文件写入“65”时,文件的磁盘内容保存的是“6”和“5”这两个字符对应的ASCII码,分别是54和53。因此文件的磁盘内容是54和53。当用记事本打开文件时,记事本读到54,就显示出对应的“6”。再读到53,就显示出对应的“5”。

2. 怎样读取数据库存储的二进制图片文件

下面我们将示例一个图片文件读取存储至数据库并从数据库中读取图片信息并显示的案例:

1、首先读取硬盘上的某一具体图片文件,读取模式设置为readBinary方式:

<cffile action = "readBinary" file = "temp directory here#file.serverFile#" variable = "test">

2、将读取出来的二进制内容存储至数据库中(注:数据库字段需设置成能存储图片类型的字段,如blob类型):

<cfquery datasource = "datasource">

insert into imageTest values (<cfqueryparam cfsqltype="cf_sql_blob" value="#test#">)

</cfquery>

通过1、2两个步骤,我们轻松实现了读取图片文件并存储至数据库的操作过程。

3、从数据库中读取图片信息,该文件可命名为dispImage.cfm:

<!--- 在此需特别注意enablecfoutputonly的压缩空白功能,如果不对该页面进行空白压缩,很可能会造成图片无法显示的问题 --->

<cfprocessingdirective suppressWhiteSpace="yes">

<cfsetting enablecfoutputonly="yes">

<!--- 读取相应的图片信息 --->

<cfquery datasource = "datasource">

select image from imageTest where variable here#

</cfquery>

<!--- 设置浏览器输出的格式,我们将它设置为图片的JPG类型,用户可根据实际情况改动类型设置 --->

<cfcontent type="image/jpg">

<!--- 输出图片 --->

<cfoutput>#toString(imageTest.image)#</cfoutput>

</cfprocessingdirective>

<cfabort>

4、显示图片内容,调用dispImage.cfm页面:

<img src = "dispImage.cfm?id=your variable here">

通过3、4两个步骤,我们也很容易的就完成了从数据库中读取图片信息并在页面显示的功能。

总结:实际上,除了图片文件可以如此处理,其它的文件也能通过类似方式进行处理,可将任意文件类型存储至数据库,只是文件大小的原因以及数据库存储读取速度性能限制,我们基本上还是不建议将文件存储至数据库,毕竟硬盘读取要快得多。

3. 如何从SQL数据库中读取二进制数据

读出并生成图片到物理位置
public void Read()
{
byte[] MyData = new byte[0];
using (SqlConnection conn = new SqlConnection(sqlconnstr))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from T_img";
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
MyData = (byte[])sdr["ImgFile"];//读取第一个图片的位流
int ArraySize= MyData.GetUpperBound(0);//获得数据库中存储的位流数组的维度上限,用作读取流的上限

FileStream fs = new FileStream(@"c:\00.jpg", FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(MyData, 0, ArraySize);
fs.Close(); //-- 写入到c:\00.jpg。
conn.Close();
Console.WriteLine("读取成功");//查看硬盘上的文件
}
}

4. java中 如何将存放在数据库中的pdf、doc、jpg等文件读出来(二进制形式存放在数据)

在数据库中存放这些个二进制文件的字段是BLOB,oracle和MysqL里面都是
java中读取 BLOB数据:
首先做查询,拿到查询结果ResultSet rs = XXXX (和普通数据查询一样)
然后:Blob blob = rs.getBlob("字段名"); 拿到你的Blob ,
得到文件的二进制流:InputStream binaryStream= blob.getBinaryStream();,
你的文件数据就在这个流当中,你想怎么用就怎么取,比如,读出来存到一个byte[]中,以便序列化传输,读出来构造成一个File直接存放到本地等等。

举个例子吧:从这个binaryStream中读取数据到byte[]的方法,
////////---------------------
/**
* 从binaryStream中读取数据到byte[]的方法
* @param in 即binaryStream
* @return
* @throws Exception
*/
public static byte[] readStreamToByteArray(InputStream in) throws Exception{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while((len = in.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
outputStream.close();
in.close();
return outputStream.toByteArray();
}

//

热点内容
呐喊解压歌曲 发布:2025-03-10 19:30:22 浏览:667
怎样用电脑做家庭云服务器 发布:2025-03-10 19:28:07 浏览:242
编程分享家 发布:2025-03-10 19:24:19 浏览:729
python切换路径 发布:2025-03-10 19:21:58 浏览:920
数值最优化算法与理论 发布:2025-03-10 19:09:45 浏览:313
p30服务器怎么样 发布:2025-03-10 19:01:36 浏览:4
四州志是由谁编译的 发布:2025-03-10 19:01:33 浏览:213
java模 发布:2025-03-10 19:00:42 浏览:121
数据库查不到数据 发布:2025-03-10 18:52:16 浏览:482
php码农 发布:2025-03-10 18:45:45 浏览:791