BufferedInputStream в byte[] для отправки через сокет в базу данных

Я искал ответ на этот вопрос, но ничего не мог найти на Это. Ранее сегодня я спросил, как я могу преобразовать файл в строку с помощью массива байтов, а затем обратно, для последующего извлечения.

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

По сути, раньше я использовал небуферизованные потоки, чтобы превратить файл в массив байтов. Теоретически это хорошо работает, но требует много памяти, что в конечном итоге приведет к исключению размера кучи. Вместо этого я должен использовать буферизованные потоки (по крайней мере, мне так сказали), и проблема, с которой я столкнулся сейчас, заключается в переходе от BufferedInputStream к byte[]. Я попытался скопировать и использовать методы, описанные в этой документации

http://docs.guava-libraries.googlecode.com/git/javadoc/index.html?com/google/common/io/package-summary. .html

Где я обмениваю небуферизованные потоки на буферизованные. Единственная проблема заключается в том, что я не могу напрямую преобразовать буферизованный поток вывода в массив байтов, как я могу с небуферизованным потоком.

Помочь? :)

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public final class BufferedByteStream {

    private static final int BUF_SIZE = 1024000;

    public static long copy(BufferedInputStream from, BufferedOutputStream to) throws IOException { 
        byte[] buf = new byte[BUF_SIZE];
        long total = 0;
        while(true) {
            int r = from.read(buf);
            if(r == -1) {
                break;
            }
            to.write(buf, 0, r);
            total += r;
        }
        return total;
    }

    public static byte[] toByteArray(BufferedInputStream in) throws IOException {
        BufferedOutputStream out = new BufferedOutputStream(new ByteArrayOutputStream());
        copy(in, out);
        return out. // <--- Problem is here
    }
}

РЕДАКТИРОВАТЬ:

Я все еще получаю ошибки Heap Space. Итак, теперь я опубликую весь код:

main.java

import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import jserver.io.BufferedByteStream;
/**
*
* @author Vipar
*/
public class main {
    public static void main(String[] args) {
    File f = new File("");
        try {
            byte[] buf;
            try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f))) {
                buf = BufferedByteStream.toByteArray(bis);
                bis.close();
            }
            File f2 = new File("");
            try (FileOutputStream fos = new FileOutputStream(f2)) {
                fos.write(buf);
                fos.close();
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

BufferedByteStream.java

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public final class BufferedByteStream {

    private static final int BUF_SIZE = 1024000;

    public static long copy(BufferedInputStream from, BufferedOutputStream to) throws IOException { 
        byte[] buf = new byte[BUF_SIZE];
        long total = 0;
        while(true) {
            int r = from.read(buf);
            if(r == -1) {
                break;
            }
            to.write(buf, 0, r);
            total += r;
        }
        return total;
    }

    public static byte[] toByteArray(BufferedInputStream in) throws IOException {
        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
        BufferedOutputStream out = new BufferedOutputStream(bytesOut);
        copy(in, out);
        return bytesOut.toByteArray();
    }
}

8
задан enkara 18 January 2018 в 10:57
поделиться