【问题标题】:UniObjects for Java read object code fileUniObjects for Java 读取目标代码文件
【发布时间】:2013-08-30 21:21:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java universe uniobjects


    【解决方案1】:

    这就是我们最终要做的:

    我找不到让数据集读取二进制代码的方法,所以我使用子程序一次读取一个项目。在读取这些项目之前,我必须在数据库上安装并运行一个 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 编码项目作为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);
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-08
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多