ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

无法弄清楚这些C#和Java代码的不同之处

2019-07-28 16:00:52  阅读:202  来源: 互联网

标签:java c-2 apache-commons


我有一些C#代码将图像转换为base64字符串.代码是:

MemoryStream ms = new MemoryStream();
Image img = Image.FromFile(filename);
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
string s = Convert.ToBase64String(ms.GetBuffer());

我试图用JAVA实现它.我的java代码是:

BufferedImage img = null;
img = ImageIO.read(new File(filename));
byte[] bytes = ((DataBufferByte)img.getData().getDataBuffer()).getData();
String js = Base64.encodeBase64String(bytes);

这两段代码应为同一图像文件返回相同的字符串.但他们正在返回不同的字符串.我无法弄清楚原因.任何人都可以对此有所了解吗?

解决方法:

this two piece of code should return the same string for the same image file

不,他们真的不应该.

C#代码返回图像数据的JPEG编码版本的base64表示 – 最后可能会返回0,因为您使用的是GetBuffer而不是ToArray. (你想在这里ToArray.)

Java代码根据其SampleModel返回原始栅格数据的base64表示.我希望它比C#代码返回的字符串大得多.

即使两段代码都使用相同的格式对图像进行编码,这并不意味着它们会提供完全相同的数据 – 这取决于编码.

重要的是,如果您只想要“base64中文件的内容”,那么您根本不需要通过图像.例如,在C#中你可以使用:

string base64 = Convert.ToBase64String(File.ReadAllBytes(filename));

事实上它是一个图像在这方面是无关紧要的 – 文件只是一个字节的集合,你可以在不理解这些字节含义的情况下对其进行base64编码.

标签:java,c-2,apache-commons
来源: https://codeday.me/bug/20190728/1563468.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有