首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UniObjects for Java读取对象代码文件

UniObjects for Java读取对象代码文件
EN

Stack Overflow用户
提问于 2013-08-30 21:21:51
回答 1查看 476关注 0票数 0

我正在使用UniVerse方法使用UniObjects for从UniFile.read()数据库中读取数据。这是我为此使用的代码类型的一个示例。

代码语言:javascript
复制
...
UniFile uFile = uSession.open ("ORDERS");
UniDataSet datasetRequest = getUnidatasetRequest();
UniDataSet datasetResult = uFile.read(datasetRequest);  
...

对于大多数查询来说,这是可行的,但是当我尝试读取对象文件(例如SOMEFILE.O)时,读取会截断文件中的记录。我认为对象代码中的特殊字符正在引起问题。

是否有一种使用UniObjects for Java读取对象代码记录的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-04 20:52:57

这就是我们最后所做的:

我找不到让dataset读取二进制代码的方法,所以我使用子例程逐个读取项。在读取项目之前,我必须在数据库上安装并运行一个UniBasic子例程,以便使用如下所示将项编码到基64中:

代码语言:javascript
复制
...

LOOP
    READBLK A.BYTE FROM FILE, 1 THEN NULL ELSE DONE = TRUE
UNTIL DONE DO
    TO.ENCODE = TO.ENCODE : A.BYTE
REPEAT
ENCODE('Base64', 1, TO.ENCODE, 1, RET.VALUE, 1)

...

该子例程将基64编码项作为String返回给UOJ,然后可以对其进行解码,不会丢失任何数据。以下是Java代码的一个示例:

代码语言:javascript
复制
...
UniSubroutine readBlkSub = unisession.subroutine(routineName, 4);
readBlkSub.setArg(0, getNameID());
readBlkSub.setArg(1, itemName);
readBlkSub.call();
final String SUCCESS = "0";
if (readBlkSub.getArg(3).equals(SUCCESS)) {
    encodedObjectCode = readBlkSub.getArg(2);
    sun.misc.BASE64Decoder decoder = new BASE64Decoder();
    byte[] decodedBytes = decoder.decodeBuffer(encodedObjectCode);
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18541645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档