use*_*889 2 binary gwt bytearray
关于二进制数据和GWT已经存在一些问题.阅读完之后,我仍然不确定以下是否可行(尽管我是一个完整的GWT初学者!):
我有一些非常复杂的数据文件只存在于二进制形式,我无法将它们转换为XML或JSON.我有一个封闭的源库,虽然它接受一个byte []并返回一个我可以使用的Java对象.为了让我的GWT应用程序运行,我'打印出'其中一个二进制数据文件,并在我从GWT-app代码访问的.java文件中对生成的byte []进行硬编码.一切正常.显然这只是一个测试,在部署的应用程序中,我无法对这些数据文件进行硬编码.我想将它们放在我的GWT-app所在的目录中,并使用我的GWT应用程序"加载"它们.
我认为我可以通过GWT从我的服务器"加载"文本文件,对吧?为什么我不能用GWT读取二进制数据?或者我可以将二进制数据文件作为文本读取,将字符串读入byte []吗?我读了很多关于base64编码的内容,GWT可以读取它,虽然我真的不明白他们在说什么.我可以将我的服务器配置为以base64编码的方式提供这些二进制数据文件,然后使用GWT读取它们吗?
还是有其他解决方案吗?如果我能提供帮助,我不想触及任何JS代码.这就是我开始使用GWT的原因;)
谢谢你的帮助 :)
我们假设我们在HTML 4上.
GWT客户端无法"读取"文件.GWT客户端是在浏览器上运行的javascript.浏览器安全性不允许您读取本地文件.您必须让servlet代理在服务器上为您读取文件.
您为文件设置了mime类型,因为您希望浏览器下载文件并调用本地PC来调用相应的软件 - 例如,pdf调用pdf reader或xls调用ms excel.与GWT Java或Javascript无关(启用下载除外).
为什么需要GWT客户端来读取二进制文件?如果你这样做,你的架构可能是错误的."错误"是一个不客气的词.也许,错位是一个更好的词.您的AJAX瘦客户端服务器概念未对齐.当您进入GWT的大门时,将您的桌面处理概念和习惯放在门口.
GWT是Java但不是Java
我不得不提醒人们,GWT Java只是Javascript的一个更连贯的表示.当您使用GWT Java编写代码时,请始终记住您实际上是使用Javascript而不是Java进行编码.所有Java源代码都被翻译为Javascript
因此,GWT编译器需要在源代码中提供所有Java类.GWT编译器无法将Java字节码jar/class文件转换为Javascript.如果您的库是字节码,或者您的源库在调用链的任何地方调用字节码库,则编译将失败.
服务器端和客户端GWT之间的混淆
GWT RPC有时是GWT新手混淆的根源.他们似乎没有意识到远程servlet是唯一被编译成字节码的部分,因为它在服务器上运行.特别是如果你使用Vaadin - 因为他们故意模糊了服务器和浏览器之间的界限.因此,GWT新手开始想知道,"为什么我的字节码库只能在应用程序的某些部分工作?"
ajax客户端服务器架构
GWT仅仅是一个支持Web的UI.为什么你不能在服务器上做任何你想做的事情,让服务器反映它正在做什么或做了什么UI?为什么必须在浏览器上完成?
想象一下你的GWT接口是一个加强的JSP.想象一下,你正在编写一个JSP.您是否让JSP将二进制数据吸入浏览器并让JSP生成Javascript来分析那里的二进制数据?
我编写了复杂的统计分析,我只是将浏览器用作服务器上正在进行的操作的反映.工程师认为他/她正在他/她的PC上运行分析.生成图表/报告.但这一切都是通过呼叫SAS在服务器上完成的.
面向服务的模式/架构
您的服务器将提供服务.您的浏览器GWT客户端将请求这些服务.打开文件,读取文件,分析文件,生成可视/ mime分析表示并将其传递给浏览器.简单地将GWT浏览器客户端视为基于服务器的操作的显示监视器.GWT是一个魔术师的伎俩,可以帮助我产生幻觉,让工程师觉得他们正在本地PC上进行分析.当然,作为工程师,他们中的大多数人都知道浏览器并没有真正开展工作.
当您的用户对分析感到满意时,请让您的服务生成结果的mime表示,以便浏览器可以下载它以调用mime映射的相应本地PC软件.
在服务器上执行此操作并将其反映在浏览器上.
进一步编辑:关于二进制数据......
在web应用程序中使用base64编码背后的动机:auth令牌,图片,音频文件的传输 - 这样他们的二进制表示和排序不会被像endianness这样的架构细微差别弄乱.
例如,不要尝试编写浏览器应用程序来读取原始二进制电子表格 - 在将任何二进制元素发送到浏览器应用程序之前,始终让服务器将其转换为XML或JSON(最好是JSON),其中任何二进制元素应该是base64编码的.或者,如果您的生活目的是攀登珠穆朗玛峰,那么发明一种与架构无关的编码来代替base64来传输二进制数据.
如果是浏览器的OS处理(如音频,图片,pdf),则仅使用二进制信息.发送二进制数据仅由javascript例程处理没有意义.javascript例程必须使用无关的处理时间来翻译它(除非再次,如果你生活中的目的是攀爬......).