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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение файла, крошит изображения 
V
    Опции темы
Fieral
Дата 12.5.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Читаю файл в строку:
Код

public String File2String(String f, boolean b) throws IOException {
        // TODO Auto-generated method stub
        FileInputStream fstream;
        DataInputStream in;
        int bb;
        fstream = new FileInputStream(f);
        in = new DataInputStream(fstream);

        ByteArrayOutputStream out = new ByteArrayOutputStream();

        if (b) {
            System.out.println("Reading: " + f);
        }
        while ((bb = in.read()) != -1) {

            out.write(bb);

        }
        String s = out.toString();

        out.close();// -Djava.security.policy=C:/rmi.plc
        in.close();
        fstream.close();

        return s;
    }


Затем пишу строку в файл:
Код

public void String2File(String f, String data, boolean b)
            throws IOException {
        // TODO Auto-generated method stub
        if (b)
            System.out.println("Writing: " + f);
        FileOutputStream fos = new FileOutputStream(f);
        fos.write(data.getBytes());
        fos.flush();
        fos.close();

    }


Текстовые файлы переносят это нормально, а изображения крошатся:
user posted image

Почему?


--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
LSD
Дата 12.5.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Fieral @  12.5.2009,  14:05 Найти цитируемый пост)
Текстовые файлы переносят это нормально, а изображения крошатся:

Почему?

Потому что вот это
Код

fos.write(data.getBytes());

бред. 

У тебя бинарные данные, а ты их передаешь через строку. Естественно при преобразованиях кодировок, часть данных теряется.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Fieral
Дата 12.5.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну хорошо, допустим я засериализую данные:
Код


class suchok implements java.io.Serializable {
    byte[] data = null;
}

public String File2String(String f, boolean b) throws IOException {
        // TODO Auto-generated method stub

        FileInputStream fs = new FileInputStream(f);
        BufferedInputStream bi = new BufferedInputStream(fs);
        int bb;

        ByteArrayOutputStream out = new ByteArrayOutputStream();

        if (b) {
            System.out.println("Reading: " + f);
        }

        while ((bb = bi.read()) != -1) {
            out.write(bb);
        }

        suchok suchok = new suchok();
        suchok.data = out.toByteArray();

        ByteArrayOutputStream out2 = new ByteArrayOutputStream();
        ObjectOutputStream oj = new ObjectOutputStream(out2);
        oj.writeObject(suchok);


        oj.flush();
        oj.close();

        String s = out2.toString();

        out.close();
        bi.close();
        fs.close();

        return s;
    }



Получаю строку в которой закопан suchok. Теперь обратно её распаковываем:

Код

    public void String2File(String f, String data, boolean b)
            throws IOException, ClassNotFoundException {
        // TODO Auto-generated method stub
        if (b)
            System.out.println("Writing: " + f);
        ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
        ObjectInputStream ik = new ObjectInputStream(in);
        suchok K = (suchok) ik.readObject();

        FileOutputStream fos = new FileOutputStream(f);
        fos.write(K.data);
        fos.flush();
        fos.close();

    }


Ничего не изменилось.

Это сообщение отредактировал(а) Fieral - 12.5.2009, 16:25
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
Fieral
Дата 12.5.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

public String File2String(String f, boolean b) throws IOException {

        FileInputStream fs = new FileInputStream(f);
        BufferedInputStream bi = new BufferedInputStream(fs);
        int bb;

        ByteArrayOutputStream out = new ByteArrayOutputStream();

        Vector<Byte> v = new Vector<Byte>();

        while ((bb = bi.read()) != -1) {
            v.add((byte) bb);
        }

        byte[] by = new byte[v.size()];
        for (int i = 0; i < v.size(); i++) {
            by[i] = v.get(i);
        }
        suchok suchok = new suchok();
        suchok.data = by;


        ByteArrayOutputStream out2 = new ByteArrayOutputStream();

        ObjectOutputStream oj = new ObjectOutputStream(out2);
        oj.writeObject(suchok);
        oj.flush();
        oj.close();

        String s = out2.toString();



        out.close();
        bi.close();
        fs.close();

        return s;
    }


Аналогично.

----

Как превратить содержимое файла в строку и обратно без потери данных?




--

Это сообщение отредактировал(а) Fieral - 12.5.2009, 16:48
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
LSD
Дата 12.5.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Fieral @  12.5.2009,  16:07 Найти цитируемый пост)
ну хорошо, допустим я засериализую данные:

Еще лучше smile 

Нафига нужны все эти извраты? Просто читай данные в byte[] и пиши в файл его же.
Код

    public static byte[] readFile(File inFile) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        FileInputStream in = new FileInputStream(inFile);
        try {
            byte[] buffer = new byte[32 * 1024];
            int read;
            while ((read = in.read(buffer)) != -1) {
                out.write(buffer, 0, read);
            }
        } finally {
            in.close();
        }
        return out.toByteArray();
    }

    public static void writeFile(File outFile, byte[] data) throws IOException {
        FileOutputStream out = new FileOutputStream(outFile);
        try {
            out.write(data);
        } finally {
            out.close();
        }
    }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Fieral
Дата 12.5.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну мне хочется завернуть файл в xml:

Код

<file>
            <name>r-001.clp</name>
            <data>&#xD;(deftemplate MAIN::input1&#xD;    &#xD;    (slot percentage&#xD;</data>
</file>


Аналогично я паковал целые дериктории, пока не уперся в вышеозначенную проблему.

Это сообщение отредактировал(а) Fieral - 12.5.2009, 18:36
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
SoulKeeper
Дата 12.5.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



Закодировать byte[] в base64, потом раскодировать.
PM MAIL   Вверх
Fieral
Дата 12.5.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код


public void String2File(String f, String data, boolean b)
            throws IOException {
        // TODO Auto-generated method stub
        if (b)
            System.out.println("Writing: " + f);
        FileOutputStream fos = new FileOutputStream(f);
        
        fos.write(new sun.misc.BASE64Decoder().decodeBuffer(data));
        fos.flush();
        fos.close();

    }

public String File2String(String f, boolean b) throws IOException {
        // TODO Auto-generated method stub
        FileInputStream fstream;
        DataInputStream in;
        int bb;
        fstream = new FileInputStream(f);
        in = new DataInputStream(fstream);

        ByteArrayOutputStream out = new ByteArrayOutputStream();

        if (b) {
            System.out.println("Reading: " + f);
        }
        while ((bb = in.read()) != -1) {

            out.write(bb);

        }
        String s = new sun.misc.BASE64Encoder().encode(out.toByteArray());
        
        out.close();// -Djava.security.policy=C:/rmi.plc
        in.close();
        fstream.close();

        return s;
    }





Это сообщение отредактировал(а) Fieral - 12.5.2009, 20:19
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
LSD
Дата 13.5.2009, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Осталось научиться:
1. Нормально формулировать вопрос.
2. Читать данные блоками а не побайтово.
3. Не пользоваться не стандартными пакетами.
и все будет хорошо.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Fieral
Дата 13.5.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



1) Кто знает правильный вопрос - уже знает пол ответа.
2) подправил
3) не понял про нестандартные пакеты
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
SoulKeeper
Дата 13.5.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 14.1.2007
Где: Ukraine, Lviv.

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



sun.* не должны использоватся, оно может быть в любой момент изменено производителем что приведет к поломке программы.

http://migbase64.sourceforge.net/
http://commons.apache.org/codec/

Вот две реализации Base64 которые можно использовать.
PM MAIL   Вверх
LSD
Дата 13.5.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Fieral @  13.5.2009,  12:56 Найти цитируемый пост)
3) не понял про нестандартные пакеты 

Why Developers Should Not Write Programs That Call 'sun' Packages


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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