因此,对于我正在进行的项目,我需要将.FRX文件中的二进制数据读入我的Java项目。然而,Java的标准字节读取器不断为我返回错误的字节,我相信这可能是Java修改过的UTF8编码的结果。如果我使用C#的二进制读取方法,我会得到我需要的输出。一个显而易见(但证明是困难的)解决方案是使用C#和DLL包装到Java项目中,我只是想知道是否有人在Java中有任何更简单的替代方案,也许是可以用Java实现的替代标准字节读取器相对容易。
非常感谢任何帮助!
问题更新
这是我的C#程序,它返回我正在寻找的输出。
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
public class GetFromFRX
{
public string getFromFRX(string filename, int pos)
{
StringBuilder buffer = new StringBuilder();
using (BinaryReader b = new BinaryReader(File.Open("frmResidency.frx", FileMode.Open)))
{
try
{
b.BaseStream.Seek(pos, SeekOrigin.Begin);
int length = b.ReadInt32();
for (int i = 0; i < length; i++)
{
buffer.Append(b.ReadChar());
}
}
catch (Exception e)
{
return "Error obtaining resource\n" + e.Message;
}
}
return buffer.ToString();
}
}
这里有一些格式不同的Java代码:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
public class JavaReader {
public static void main(String[] args) throws Exception {
InputStream i = null;
BufferedInputStream b = null;
try{
// open file
i = new FileInputStream("frmResidency.frx");
// input stream => buffed input stream
b = new BufferedInputStream(i);
int numByte = b.available();
byte[] buf = new byte[numByte];
b.read(buf, 2, 3);
for (byte d : buf) {
System.out.println((char)d+":" + d);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(i!=null)
i.close();
if(b!=null)
b.close();
}
}
}
答案 0 :(得分:1)
在您的Java代码中:
available()
。read()
方法返回的结果。DataInputStream.readInt()
等方法。