2010-07-23 7 views
1

Java 프로그램을 Cocoa로 이식 할 때, 필자는 java.io.Reader와 그 하위 클래스를 사용하여 프로그램을 보았습니다. 나는 그들이하는 일에 익숙하지 않아서 좋은 대안을 찾을 수 없다. 누구든지 교체에 대한 좋은 권고 사항이 있습니까? 아니면 다시 작성해야합니까?Java Reader 클래스에 해당하는 코코아

+0

우리 중 대부분은 java.io.Reader가 무엇인지에 대해 더 이상 알지 못합니다. 즉, 동등한 제안 방법이 없습니다. 원하는 것을 직접 기술해야합니다. 그래야만 우리는 그것을 제공 할 수있는 어떤 것을 권할 수 있습니다. –

+0

감사합니다. 코드 사용법을 알아 내기 위해 코드를 파헤쳐 야합니다. 버그를 피하기 위해 가능한 한 코드를 변경하기를 바랬지 만 여기에는 그 방법이 없습니다. – CajunLuke

+1

@Peter Hosey - Java에는 입출력 구조가 있습니다 : 스트림 및 판독기. 스트림은 2 진 데이터로 작동하며, 판독기는 문자 (유니 코드 및 인코딩) 데이터로 작업합니다. NSString과 마찬가지로 모든 Java 문자는 UTF-16입니다. 독자는 파일을 열고, 5 개의 "문자"를 읽는 것이 쉽지 않으며, Reader는 모든 인코딩과 디코딩을 수행합니다. NSString은 그것을 제공하지 않으며 Apple 프레임 워크에서 라이브러리 함수의 동일한 세트가없는 것 같습니다. –

답변

1

Java의 독자는 블록 파일 읽기 작업의 "개체화된"버전입니다. Objective C에서 C 라이브러리에 액세스 할 수 있습니다. 그러면 원시 데이터 파일을 블록 단위로 읽는 기능인 fopen, fread, fclose이 제공됩니다. 그게 전부 필요한게 아닌가요?

예를 들어 정수를 읽어야하는 경우 (void *) 데이터 블록을 (int *)로 캐스트하면됩니다.

자바 리더가 더 추상적이라고 주장 할 수 있습니다. 예, 파일뿐만 아니라 어디에서나 물건을 읽을 수있는 하위 클래스가 있습니다. 그러나 기존 프로그램을 포팅하는 경우 데이터 소스가 파일인지 여부는 이미 알고 있습니다.

+0

Java의 Reader 클래스는 멀티 바이트 문자로 작업 할 때의 어려움을 처리합니다. 한 번에 바이트 버퍼를 가져 와서 NSString으로 변환하는 것만 큼 간단하지 않습니다. – TJez

+0

@TroyJ NSString에 initWithBytes : length : encoding :이 있다고 생각합니다. –

+0

http://stackoverflow.com/questions/25552673에서 스트리밍 할 때 유용하게 작동하는 하나의 메소드를 얻는 데 얼마나 많은 작업이 필요한지 살펴보십시오. Reader는 스트림 유니 코드 접두사를 처리하여 인코딩을 자동으로 감지합니다. 리더와 하위 클래스는 매우 간단하고 강력한 클래스 집합입니다. 제 3 자 라이브러리에도 존재하는 것처럼 나는 정말로 충격적입니다. – TJez