2013-11-02 3 views
1

.bin을 .txt 로딩하는 것으로 어떻게 바꿀까요? .txt 파일에 대한 정보를 .bin 파일처럼 hashmap에 넣길 원합니다.자바 .bin 파일에서 .txt 로딩

public static int currency; 
    public HashMap<Integer, Shop> cars = new HashMap<Integer, Car>();  
public void load() { 
      try { 
       @SuppressWarnings("resource") 
       RandomAccessFile carFile = new RandomAccessFile("data/cars.bin", "r"); 
       int carsAmt = carFile.readShort(); 
       for (int carId = 0; carId < carAmt; carId++) { 
        int carId = carFile.readShort(); 
        int currency = carFile.readShort(); 
        int[] cars = new int[carFile.readByte()]; 
        int[] amounts = new int[cars.length]; 
        boolean isTruck = carFile.read() == 1; 
        for (int carData = 0; carData < cars.length; carData++) { 
         cars[carData] = carFile.readShort(); 
         amounts[carData] = carFile.readInt(); 
        } 
        cars.put(carId, new Car(carId, currency, isTruck, cars, amounts, true)); 
       } 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      System.out.println("Loaded " + cars.size() + " Cars"); 
     } 
+0

RandomAccessFile은 모든 파일을 읽을 수 있습니다. – Radiodef

+0

''data/cars.bin ''을''data/cars.txt''로 변경할 수없는 이유는 무엇입니까? – vandale

답변

2

bintxt 이름의 단지 부분입니다. 그러나 일반적으로 txt 파일에는 문자 인코딩 중 하나를 사용하여 포맷 된 데이터가 들어 있습니다. 일반적인 인코딩은 UTF-8과 ASCII의 확장입니다. "인코딩"은 바이트 시퀀스를 문자에 매핑하는 것입니다. 예를 들어, UTF-8에서 a은 8 비트 시퀀스 01100001 (16 진수의 61)에 매핑됩니다. 실제로 모든 파일은 일련 번호 01으로 저장되지만 txt 파일은 대개 인코딩에 따라 시퀀스 만 저장합니다. 반대로 bin 파일에는 "2 진"형식으로 저장된 데이터가 포함됩니다. 즉, 그 안에있는 데이터가 어떤 종류의 텍스트 인코딩과도 일치하지 않습니다. 귀하의 경우, bin 파일에는 바이너리 표현 (일련의 비트 또는 0과 1)으로 저장된 일련의 숫자가 포함되어 있습니다.

귀하의 질문에 대한 대답은이 코드 블록을 다시 작성해야한다는 것입니다. 이제 바이너리 값을 직접 사용하는 대신 텍스트 파일을 읽으려는 경우 txt 파일을 String으로 디코딩 할 수있는 리더가 필요하며 그 다음에 String을 숫자 값으로 변환해야합니다. 이 단계를 "구문 분석"이라고합니다.

은 올바르게 읽을 수 있도록 txt 파일의 인코딩을 알아야합니다. RandomAccessFile에는 UTF-8 인코딩 텍스트를 읽는 방법이 있지만 다른 인코딩을 사용하는 경우 다른 곳을 찾아야합니다. BufferedReader 사용에 대한 정보는 this answer을 참조하십시오. Scanner 클래스가 유용 할 수도 있습니다. Scanner은 값을 구문 분석 할 수 있습니다.

+0

소원 나는 100 배까지 투표 할 수 있습니다. 우수 답변. –