Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > String.getBytes() on linux


Автор: uzgenius 12.11.2010, 11:52
Здравствуйте Народ!
у меня тут возникла проблема,
пишу программу которую читает из бинарного файла и обрабатывает данные, использовал String.getBytes(), вот кусок кода с проблемой
Код

   byte bayty[];
   BufferedReader bufferedreader = new BufferedReader(new FileReader(file));
   String s = bufferedreader.readLine();
   bayty = s.getBytes();

    for (int x=0;x<bayty.length;x++)
    {
        System.out.print(bayty[x]+"\n");
    }

под виндус работает нормально, вот результат
Код

-128     
-96
-128
4
7
16
17
5
6
0
4
0
49
-128
-128
6


а под линюкс запускаю результат другая, т.е. неправильная
Код

-17
-65
-67
-17
-65
-67
-17
-65
-67
4
7
16
17
5
6
0
4
0
49
-17
-65
-67
-17
-65
-67
6

в чем может быт проблема, помогите пожалуйста, я попробовал разные чарсеты не работает как надо, т.е. если ASCII делаю, под винда не пашет, а под линюкс:
Код

63
63
63
4
7
16
17
5
6
0
4
0
49
63
63
6

заранее спасибо, 

Автор: kkorsakoff 12.11.2010, 12:07
На самом деле проблема на 99% в кодировке. Вы чарсеты указывали при создании Reader и при вызове getBytes()?

Автор: uzgenius 12.11.2010, 12:13
при вызове гетбайтс, а при создании ридир можно указать чарсет?

Автор: uzgenius 12.11.2010, 13:06
в ридире тоже в разных чарсетах попробовал, но результат тоже самое :(
Код

InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream (file), "UTF-8");
BufferedReader bufferedreader = new BufferedReader(inputStreamReader);//new FileReader(file)


Автор: jk1 12.11.2010, 14:42
Цитата

пишу программу которую читает из бинарного файла


Читать из бинарного файла надо при помощи InputStream, при помощи Reader читают символы:
Код

        InputStream is = new BufferedInputStream(new FileInputStream("c:/2.xml"));
        byte[] result = new byte[is.available()];
        is.read(result);
        for (Byte i : result){
            System.out.println(i);
        }

И о кодировке беспокоится не надо. Ну какая в самом деле кодировка в бинарном файле, о чем вы?)

Автор: Skipy 13.11.2010, 12:03
И еще о чтении бинарного файла: http://skipy-ru.livejournal.com/3621.html

Автор: uzgenius 19.11.2010, 09:25
извините за долгий ответ:
вот так я решил проблему, в виндусе и в линуксе тоже работает:
Код

public static byte[] getBytesFromFile(File file, int len) throws IOException {
        InputStream is = new FileInputStream(file);
        long length = len;
        if (length > Integer.MAX_VALUE) {
            // файл слишком большой    
        }
    
        byte[] bytes = new byte[(int)length];
        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length
               && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
            offset += numRead;
        }
    
        if (offset < bytes.length) {
            throw new IOException("не могу закончит чтение файла "+file.getName());
        }
    
        is.close();
        return bytes;
    }

всем спасибо, можно тему закрыт smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)