Справка по Java: Справка по кодировке символов - int to String - PullRequest
1 голос
/ 05 сентября 2011

Я пытаюсь использовать метод write (int) для java.io.OutputStream и не могу понять, как правильно преобразовать int обратно в строку.

public PrintWriter out = new PrintWriter(new OutputStream() {

    @Override
    public void write(int b) throws IOException {
        outputField.setText(/* I need a byte[] or char[] or string from this int */);
    }

});

Мне очень нужна помощь с этим. Я пытался использовать метод для создания байта [] из целого числа, но из-за этого в тексте было много пробелов.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2011

Кажется очень странным направлять OutputStream в нечто вроде текстового поля в графическом интерфейсе. Вы уверены, что это то, что вы действительно хотите? Если вы хотите захватить что-то, записываемое в Writer, обычно подходит StringWriter . Вы просто позволяете писать, затем вызываете toString () , чтобы получить окончательный результат. Если вы действительно ищете способ записать материал в текстовое поле, как оно записано в Writer / OutputStream, то проверьте это:

public static void main(String[] args) throws Exception {
    JFrame frame = new JFrame("I be streamin!");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JTextField field = new JTextField();
    frame.add(field);
    frame.pack();
    frame.setVisible(true);

    System.out.println("Enter stuff to write to the field");
    char c;
    InputStreamReader in = new InputStreamReader(System.in, "UTF-8");
    while ((c = (char) in.read()) != -1) {
        String currentText = field.getText();
        field.setText(currentText + c);
        Thread.sleep(250);
    }
}

Примечание 1: используйте правильную кодировку вместо UTF-8.

Примечание 2: Хотя я замедлил это с помощью Thread.sleep (), запись символа за раз в поле несколько расточительна сама по себе, потому что вы постоянно создаете и выбрасываете строки. Выполнение небольшого объема буферизации, например использование StringWriter, как я упоминал ранее, может быть лучшим подходом, если только вы не чувствуете «живую подачу», когда вещи появляются, когда они читаются.

0 голосов
/ 05 сентября 2011

Вы пробовали это

outputField.setText(""+b);

или

outputField.setText(Integer.valueOf(b).toString());
...