2015-01-22 4 views
-1

제가 작업중인 프로젝트의 경우, .FRX 파일의 이진 데이터를 Java 프로젝트로 읽어야합니다. 그러나 자바의 표준 바이트 리더기는 나에게 잘못된 바이트를 계속해서 반환한다. 나는 자바의 수정 된 UTF8 인코딩의 결과 일 수 있다고 생각한다. C#의 바이너리 읽기 방법을 사용하면 필요한 출력을 얻을 수 있습니다. 명백한 (그러나 어려운 것으로 입증 된) 솔루션은 C#과 DLL을 사용하여 Java 프로젝트를 마무리하고 있으며, Java에서 구현할 수있는 대체 표준 바이트 판독기 인 Java에서 간단한 대안을 갖고 있는지 궁금합니다. 비교적 쉽게Java에서 이진 데이터 읽기

도움을 주시면 대단히 감사하겠습니다.


질문 업데이트

는 여기에 내가 찾고 있어요 출력을 반환 내 C# 프로그램입니다. 자바 코드에서

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(); 
     } 
    } 
} 
+4

"계속 잘못된 바이트를 반환합니다"를 정의하십시오. – immibis

+0

코드를 보여주십시오. 만약 당신이 단지'InputStream.read'를 사용하고 있다면, * 인코딩/디코딩이 없습니다. (그리고 아니요, C#을 사용할 필요가 없습니다.) –

+0

Java를 다시 작성한 후에 업데이트됩니다. 이 C# 프로그램의 출력을 에뮬레이션하려고 시도합니다. – HavelTheGreat

답변

1

:

  • 당신은 특히 자바 독에 대해 경고하는 방법으로 available()를 사용하고 여기에

    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(); 
         } 
        } 
    

    그리고 몇 가지와 약간 다를 자바 코드 .

  • read() 메서드에서 반환 된 결과를 확인하지 않습니다.
  • 오프셋 2에서 버퍼로 읽은 다음 전체 버퍼를 검사하고 있습니다.
  • C# 코드가 문자를 읽는 바이트를 읽는 중입니다.
  • 길이 단어를 읽지 않습니다.
  • DataInputStream.readInt()과 같은 메서드를 사용하고 있지 않습니다. 이러한 메서드는 C# 코드에 해당합니다.
관련 문제