Page 1 of 6 123456 LastLast
Results 1 to 10 of 57

Thread: кросс-платформность на Java

  1. #1
    подниматель пингвинов crazy-mike's Avatar
    Join Date
    Nov 2006
    Location
    L'viv
    Posts
    179,963

    Talking кросс-платформность на Java

    :girl_cray2:
    Написано однажды - работает везде? Как бы не так!!!!!!! (т.е. оно "типа работает" - но "немного иначе" :grum: )
    Вообще-то пока всё латинскими буквами куда-нибудь вводится-выводится , то в это "скромное утверждение" можно даже и поверить.
    Но вот если копнуть чуть глубже (когда приходится приложения на "рідній мові" делать :grum: ) , то начинаются сюрпризы.
    Конечно же на экран всё можно гнать "картинками". Но ведь что-то из БД надо выводить. Да и записывать в БД - тоже надо (или в файлы куда-нибудь ). И тут начинается "Welcome to Hell".
    (Java , а не PHP :grum: )
    PHP Code:
    import java.lang.*;
    import java.io.*;

    class 
    Mx {

      public static 
    void main(String[] aa
      { 
         try {
           
    FileWriter f=new FileWriter("hello.txt");
           
    f.write("Привет!\n");
           
    f.close();
         } catch(
    IOException e) {
           
    System.out.println("Err!\n");
         };  
      
      }  


    Ну напишем что-то такое под Win XP (наберём текст в Notepad).
    Скомпилируем по javac -encoding CP1251 nonsense.java и запустим по java Mx. Данные в файл запишутся в кодировке windows-1251.
    Теперь туже прогу запустим на java-машине под FreeBSD (или под Linux). Она даже компилироваться будет с такими же ключами - но данные в файл запишутся с ошибками перекодировки (не запишется кирилица).
    Но если написать это чуть иначе - то всё будет работать "одинаково" и под *NIX , и под WinXP.
    (Java :grum: )
    PHP Code:
    import java.lang.*;
    import java.io.*;

    class 
    Mx {

      public static 
    void main(String[] aathrows Exception 
      
    OutputStreamWriter w
           
    = new OutputStreamWriter(new FileOutputStream("bye.txt"),"CP1251");
        
    w.write("Привет!\n");
        
    w.close();
      
      }  


    Просто для записи в файл тоже указывается перекодировка. Но всё что связано с графикой - с этим в смысле "вывода кирилицы" (по крайней мере в Swing ) проблем в самом деле нет.
    Last edited by crazy-mike; 04-08-2009 at 04:54 AM.
    Жизнь дается человеку один раз и прожить ее надо так, чтобы не ошибиться в рецептах.
    Строить Асгардию побуждает тьма, посетившая людские души

  2. #2
    подниматель пингвинов crazy-mike's Avatar
    Join Date
    Nov 2006
    Location
    L'viv
    Posts
    179,963

    Default Re: кросс-платформность на Java

    import java.lang.*;
    import java.io.*;

    class Ukr {
    public static void main(String[] aa) throws Exception
    { PrintStream f=new PrintStream(System.out,true,"KOI8U");
    f.println("Наша Юлічка!\n");
    }
    }

    javac -encoding KOI8U julia.java
    :cranky:
    Точно таким же способом назначать перекодировку для консоли и создавать PrintStream на основе defaults. :girl_cray2:
    Иначе оно нигде кроме винды правильно работать не будет!!!!
    Жизнь дается человеку один раз и прожить ее надо так, чтобы не ошибиться в рецептах.
    Строить Асгардию побуждает тьма, посетившая людские души

  3. #3
    Forum Hero Alex_3112's Avatar
    Join Date
    Jul 2005
    Location
    Туц Оукыун
    Posts
    12,761

    Default Re: кросс-платформность на Java

    Quote Originally Posted by crazy-mike View Post
    Просто для записи в файл тоже указывается перекодировка.
    Ну, это понятно - проблемы не Java, а оси, на которой Java стоит.

  4. #4
    подниматель пингвинов crazy-mike's Avatar
    Join Date
    Nov 2006
    Location
    L'viv
    Posts
    179,963

    Default Re: кросс-платформность на Java

    Quote Originally Posted by Alex_3112 View Post
    Ну, это понятно - проблемы не Java, а оси, на которой Java стоит.
    Нет - скорее всё больше похоже на "проблемы JRE". Но свой изначальный девиз - они таки нарушили!!!!!
    Жизнь дается человеку один раз и прожить ее надо так, чтобы не ошибиться в рецептах.
    Строить Асгардию побуждает тьма, посетившая людские души

  5. #5
    T-16 Tohuvabohu-Jurokugou Sixteen's Avatar
    Join Date
    Dec 2005
    Posts
    56,588

    Default Re: кросс-платформность на Java

    дудаки они. не зря их айбиэм атказалсо пакупать.
    это все Майк. Это Майк доказал айбиэму што жаба нифига не кроссплатформная. и АЙБИЭМ тут же атказалсо!
    Fabricati Diem PVNC
    Повышайте свой интеллект и вы станете монстр (С) Островский

  6. #6
    Forum Regular In2HiDef's Avatar
    Join Date
    Dec 2007
    Location
    The Buckeye State
    Posts
    37,506

    Default Re: кросс-платформность на Java

    Майк, вся драма– [OS default behavior], если ты не указываешь точно, что ты хочешь. Не кати бочку.

  7. #7
    Forum Hero Alex_3112's Avatar
    Join Date
    Jul 2005
    Location
    Туц Оукыун
    Posts
    12,761

    Default Re: кросс-платформность на Java

    Quote Originally Posted by crazy-mike View Post
    Нет - скорее всё больше похоже на "проблемы JRE". Но свой изначальный девиз - они таки нарушили!!!!!
    А причем тут JRE? Для записи файлов используются функции ОС. То, что разработчику о кодировке можно не думать в рамках одной системы или нижней половины ASCII не означает, что о ней можно не думать в общем случае.

  8. #8
    подниматель пингвинов crazy-mike's Avatar
    Join Date
    Nov 2006
    Location
    L'viv
    Posts
    179,963

    Default Re: кросс-платформность на Java

    Quote Originally Posted by In2HiDef View Post
    Майк, вся драма– [OS default behavior], если ты не указываешь точно, что ты хочешь. Не кати бочку.
    Internal Default Character Encoding (как и зафиксированный порядок байт в слове Java VM) - это как раз "фишка" Java-машины. Фактически реализация JVM под винду нарушает их собственный "типа стандарт" - потому что "вариант для UNIX" работает правильно и "под виндой"!!!
    :white:
    Жизнь дается человеку один раз и прожить ее надо так, чтобы не ошибиться в рецептах.
    Строить Асгардию побуждает тьма, посетившая людские души

  9. #9
    Forum Regular In2HiDef's Avatar
    Join Date
    Dec 2007
    Location
    The Buckeye State
    Posts
    37,506

    Default Re: кросс-платформность на Java

    Quote Originally Posted by crazy-mike View Post
    Internal Default Character Encoding (как и зафиксированный порядок байт в слове Java VM) - это как раз "фишка" Java-машины. Фактически реализация JVM под винду нарушает их собственный "типа стандарт" - потому что "вариант для UNIX" работает правильно и "под виндой"!!!
    :white:
    Internal он до того как данные сохраняются в файле. После этого факта, или поведение ОС играет роль, или файлы созданные Джавой надо объявлять совместимыми только с Джавой. С точки зрения стандарта я не вижу проблем.

  10. #10
    подниматель пингвинов crazy-mike's Avatar
    Join Date
    Nov 2006
    Location
    L'viv
    Posts
    179,963

    Default Re: кросс-платформность на Java

    Quote Originally Posted by Sixteen View Post
    жаба нифига не кроссплатформная.
    Ну - об этом все и десять лет назад ведь знали. Просто думали - что все глюки будут "типа исправляться" со временем. Но они как-то неравномерно исправляются - когда одну и ту же вещь можно делать разными способами на разных платформах. А "кроссплатформность" должна предусматривать унификацию tips and tricks - наверное. :cranky:
    Жизнь дается человеку один раз и прожить ее надо так, чтобы не ошибиться в рецептах.
    Строить Асгардию побуждает тьма, посетившая людские души

Page 1 of 6 123456 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Russian America Top. Рейтинг ресурсов Русской Америки. Terms of Service | Privacy Policy Рейтинг@Mail.ru