Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с чтением&запиcью байтов 
:(
    Опции темы
Vitaly333
Дата 21.12.2010, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

Репутация: 2
Всего: 2



Приведу сразу код:
Код


public static void main(String[] args) throws UnsupportedEncodingException{
                
        byte[] bytes = new byte[8];
        for (int i = 0;i<bytes.length;i++)
            bytes[i] = (byte) (100*Math.random());
        
        System.out.println("bytes = " + bytes);        
        
        writeFile("bytes.txt", bytes);
        bytes = readFile("bytes.txt");
        System.out.println("bytes = " + bytes);
                    
}

public static void writeFile(String file, byte[] content) {
        
        FileOutputStream writer = null;
        
        try {
            writer = new FileOutputStream(file);
            writer.write(content);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null)
                try {
                    writer.close();
                } catch (IOException e) {}
        }
        
    }

    public static byte[] readFile(String file) {
        
        FileInputStream reader = null;        
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        
        try {
            reader = new FileInputStream(file);
            byte[] tmp = new byte[255];
            int n;
            while ((n = reader.read()) != -1) {
                buffer.put(tmp, 0, n);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            if (reader!=null)
                try {
                    reader.close();
                } catch (IOException e) {}
        }
        
        return buffer.array();
    }
}



Запустив программу получаю:
Код

bytes = [B@190d11
bytes = [B@de6ced


Почему результат разный?

PM MAIL   Вверх
dobrolub
Дата 21.12.2010, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



Результат разный потому, что массивы разные - два разных объекта (массив в java – тоже объект), но содержимое должно совпадать.
PM   Вверх
Vitaly333
Дата 21.12.2010, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

Репутация: 2
Всего: 2



Цитата

Результат разный потому, что массивы разные - два разных объекта (массив в java – тоже объект)

Это понятно. Создано две ссылки на объект типа массив байтов. И эти две ссылки указывают на разл. участки памяти.


Цитата

но содержимое должно совпадать. 

Должно, но не совпадает.
Код

public static void main(String[] args) throws UnsupportedEncodingException{
                
        byte[] bytes = new byte[8];
        for (int i = 0;i<bytes.length;i++)
            bytes[i] = (byte) (100*Math.random());
        
        System.out.println("bytes = " + bytes);        
        
        writeFile("bytes.txt", bytes);
        byte[] bytes2 = readFile("bytes.txt");
        System.out.println("bytes2 = " + bytes2);
        System.out.println("equals = " + Arrays.equals(bytes, bytes2));
                    
}


Код

bytes = [B@190d11
bytes2 = [B@de6ced
equals = false

PM MAIL   Вверх
dobrolub
Дата 21.12.2010, 05:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



В чтении из файла были ошибки. Я исправил так, как написал бы сам для маленького файла. 
Код

import java.io.*;
import java.util.*;
import java.nio.*;

public class T {
    public static void main(String[] args) throws UnsupportedEncodingException, IOException {
        final byte[] bytes = new byte[8];

        for (int i = 0;i<bytes.length;i++)
            bytes[i] = (byte) (100*Math.random());

        System.out.println("bytes = " + bytes);

        writeFile("bytes.txt", bytes);
        final byte[] bytes2 = readFile("bytes.txt");
        System.out.println("bytes = " + bytes2);
        System.out.println(Arrays.equals(bytes, bytes2));
    }

    public static void writeFile(String file, byte[] content) throws IOException {
        FileOutputStream out = null;

        try {
            out = new FileOutputStream(file);
            out.write(content);
        } finally {
            if (out != null)
                try {
                    out.close();
            } catch (IOException e) {}
        }

    }

    public static byte[] readFile(String fileName) throws IOException {
        FileInputStream in = null;
        try {
            File file = new File(fileName);
            byte[] buffer = new byte[(int) file.length()];
            in = new FileInputStream(file);
            in.read(buffer);

            return buffer;
        } finally{
            if (in !=null)
              try {
                    in.close();
              } catch (IOException e) {}
        }

    }
}


PM   Вверх
Vitaly333
Дата 21.12.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

Репутация: 2
Всего: 2



dobrolub, спасибо, работает. Но почему мой вариант не верный для меня так и остается загадкой. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.