0

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

...
UniFile uFile = uSession.open ("ORDERS");
UniDataSet datasetRequest = getUnidatasetRequest();
UniDataSet datasetResult = uFile.read(datasetRequest);  
...

对于大多数查询,这可行,但是当我尝试读取目标文件时(例如SOMEFILE.O)时,此读取会截断文件中的记录。我认为目标代码中的特殊字符会导致问题。

有没有办法使用 UniObjects for Java 读取对象代码记录?

4

1 回答 1

0

这就是我们最终要做的:

我找不到让数据集读取二进制代码的方法,所以我使用子程序一次读取一个项目。在读取这些项目之前,我必须在数据库上安装并运行一个 UniBasic 子例程,以使用以下方式将项目编码为 base 64:

...

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)

...

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

...
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);
    ...
}
于 2013-10-04T20:52:57.733 回答