Как я могу прочитать набор байтов из файла и преобразовать их в буквы?

1

Я пытаюсь прочитать текст из файла, который содержит серию байтов, и хочу, чтобы они были обращены обратно к буквам/цифрам, которые будут использоваться снова. Я не нашел подходящего метода для этого при поиске в StackOverflow или Google. Чтобы показать, что я имею в виду, вот мой код:

FileReader fileReader = new FileReader("test.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
String lineFromFile = bufferedReader.readLine();
System.out.println("From File: " + lineFromFile);

OUTPUT:

From File: [78, 97, 109, 101, 32, 116, 101, 115, 116, 32, 99, 97, 114, 100, 78, 111, 32, 54, 55, 56, 56, 55, 53, 55, 49, 57, 32, 67, 117, 114, 114, 101, 110, 116, 32, 66, 97, 108, 97, 110, 99, 101, 32, 51, 55, 48, 32, 111, 118, 101, 114, 100, 114, 97, 102, 116, 32, 102, 97, 108, 115, 101, 32, 111, 118, 101, 114, 68, 114, 97, 102, 116, 76, 105, 109, 105, 116, 32, 48, 32, 112, 105, 110, 32, 50, 53, 50, 53]

Эти байты представляют буквы/числа, которые я предварительно закодировал, прежде чем записывать их в файл из другой программы Java.

Что я пробовал?

byte[] bytes = lineFromFile.split("\\s+");
String fileToString= new String(bytes, UTF_8);
System.out.println("text: " + fileToString);

Указанная ошибка:

error: incompatible types: String[] cannot be converted to byte[]
      byte[] bytes = text.split("\\s+");
                               ^

Если бы кто-нибудь мог предложить способ сделать это или, может быть, даже лучший способ кодирования, который проще декодировать после чтения из файла, это было бы очень полезно!

  • 1
    Ваш файл на самом деле не содержит серию байтов; он содержит серию разделенных запятыми целых чисел, закодированных в виде текста ASCII. Как вы кодировали их в своей программе, которая их написала?
  • 0
    @yole Я использовал byte[] bytes = details.getBytes(UTF_8); детали - это String цифр / букв, а UTF_8 - кодировка.
Показать ещё 2 комментария
Теги:
string
arrays
byte

3 ответа

2
Лучший ответ

Вы написали символы, как цифры, а не бинарные. Вам нужно прочитать эти цифры как текст и преобразовать их в символы.

String lineFromFile = bufferedReader.readLine();
// strip out the '[' and ']'
lineFromFile = lineFromFile.substring(1, lineFromFile.length()-1);
StringBuilder sb = new StringBuilder();
for(String s: lineFromFile.split(", "))
    sb.append((char) Integer.parseInt(s));
String text = sb.toString();
0
   Open a FileInputStream to the file that youve stored the Object to.
    Open a ObjectInputStream to the above FileInpoutStream.
    Use readObject method of ObjectInputStream class to read the Object from the file.
    The above method returns an Object of type Object. So you have to cast it to the original type to use it properly.

import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;

    public class ObjectIOExample {

        private static final String filepath="C:\\....obj";

        public static void main(String args[]) {

            ObjectIOExample objectIO = new ObjectIOExample();

            //Read object from file
            Student st = (Student) objectIO.ReadObjectFromFile(filepath);
            System.out.println(st);
        }

        public Object ReadObjectFromFile(String filepath) {

            try {

                FileInputStream fileIn = new FileInputStream(filepath);
                ObjectInputStream objectIn = new ObjectInputStream(fileIn);

                Object obj = objectIn.readObject();

                System.out.println("The Object has been read from the file");
                objectIn.close();
                return obj;

            } catch (Exception ex) {
                ex.printStackTrace();
                return null;
            }
        }
    }
0

split() возвращает массив String. Используйте lineFromFile.getBytes() он возвращает последовательность байтов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню