2011-09-28 6 views
1

Android 2.2 휴대 전화의 블루투스에서 원시 이진 데이터를 가져 오는 인 스트림이 있습니다. 들어오는 데이터는 크기가 1024 인 버퍼에 저장됩니다. 나는 데이터를 읽고() 가져 와서 파일에 쓴다. 그 파일을 FTP를 통해 내 컴퓨터로 보냅니다. 나는 여분의 캐릭터가 매번 삽입 될 때 ftp'ing 할 때 혼란스러운 패턴을 발견했다. 그래서 LogCat에 버퍼를 먼저 인쇄하고 캐릭터가 거기에 없다는 것을 알아 차렸다. 여기에 내 읽기 쓰기 코드가 있습니다. ftp'ing 후FTP에 추가 문자가 추가되었습니다.

09 15 D0 0D 17 0A 06 08 07 

여기 파일에있는 것입니다 : 여기

FTPClient con = new FTPClient(); 
File file = new File(Environment.getExternalStorageDirectory() + "/ftp/new/" + "testdata.bin"); 

try { 
    con.connect("someIPAddress"); 
    if (con.login("anonymous", "[email protected]")) { 
     con.enterLocalPassiveMode(); // important! 

     FileInputStream in = new FileInputStream(file); 
     boolean result = con.storeFile("testdata.bin", in); 
     in.close(); 
     if (result) { 
      Log.v("upload result", "succeeded"); 
     } 
    } 
} catch (Exception e) {e.printStackTrace();} 

는 로그 캣의 출력 예입니다

09 15 D0 0D 17 0D 0A 06 08 07 

그럼 내가 생각 흠 0A가 (CRLF)를 만들기 위해 0D를 주입하고 있지만 0A마다 발생하지는 않습니다. 나는 C#에서 같은 프로그램을 작성할 수 있으며 이것은 전혀 발생하지 않는다. 그래서 어떤 생각이나 도움?

추가 조사에서 데이터가 17A이고 파일에 17 0D 0A가 표시되는 것을 발견했습니다.

답변

2

솔루션 : FTPClient는 파일을 기본적으로 ASCII로 보냅니다. 다음 명령을 사용하여 fileType을 이진 파일로 설정하십시오.

con.setFileType(FTP.BINARY_FILE_TYPE); 
0

Windows, unix 및 mac은 모두 다른 줄 끝이 있습니다.

FTP는 ASCII 모드에서이 문제를 "수정"합니다.

+0

위의 코드에 대한 해결책은 없습니까? – JPM

관련 문제