Как прочитать из Inputstream дважды?

В мое приложении Android есть сервис, который должен читать через Inputstream файлы, он получает размер, название, а затем и сам файл. Но после получения первого файла, при попытке принять следующий, Inputstream выводит мусор. Как правильно использовать Inputstream несколько раз? Закрывать поток после каждого приходящего файла нельзя, так как закроется сокет. Вот мой сервис приема файлов:

DataInputStream sizeFileInputStream = new DataInputStream(SocketHandlerFile.getSocket().getInputStream());
file_size = sizeFileInputStream.readFloat() * 1024;
Log.d("Recieve", "получил file_size " + file_size);
Log.d("Recieve", "получил sizeFileInputStream.available() " + sizeFileInputStream.available());


ObjectInputStream objectInputStream = new ObjectInputStream(SocketHandlerFile.getSocket().getInputStream());
Object object = objectInputStream.readObject();

file_name = (String) object;
Log.d("Recieve", "получил file_name " + file_name);
byte[] byteArray = new byte[8192];
byte[] DecriptbyteArray = new byte[8192];
File externalAppDir = null;
try {
    externalAppDir = new File(Environment.getExternalStorageDirectory() + "/Android/data/" + getPackageName());
    if (!externalAppDir.exists()) {
        Log.d("Recieve", "директории не существует ");
        Log.d("Recieve", "создал директорию " + externalAppDir.getPath());
        Files.createDirectory(Paths.get(externalAppDir.getPath()));

    }
} catch (IOException e) {
    // if any error occurs
    e.printStackTrace();
}

File f = new File(externalAppDir + "/" + file_name);
Log.d("Recieve", "путь  " + f.getPath());
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);

BufferedInputStream bis = new BufferedInputStream(SocketHandlerFile.getSocket().getInputStream());
while (file_size > 0) {
    int i = bis.read(byteArray);

    DecriptbyteArray = Kuz.Decript(byteArray, key);
    fos.write(DecriptbyteArray, 0, i);
    Log.d("Recieve", "получил DecriptbyteArray");
    file_size -= i;
}
Log.d("Recieve", "получил file");
firstStart = false;
fos.close();

Вот мой отправитель файлов:

final DataOutputStream sizeFileoutputStream = new DataOutputStream(SocketHandlerFile.getSocket().getOutputStream());
sizeFileoutputStream.writeFloat(FileActivity.file_size);
sizeFileoutputStream.flush();
Log.d("Send", "отправил file_size " + FileActivity.file_size);
ObjectOutputStream nameFileObjectOutputStream = new ObjectOutputStream(SocketHandlerFile.getSocket().getOutputStream());
nameFileObjectOutputStream.writeObject(FileActivity.fileName);
nameFileObjectOutputStream.flush();
Log.d("Send", "отправил file_name " + FileActivity.fileName);
final BufferedOutputStream outputStream = new BufferedOutputStream(SocketHandlerFile.getSocket().getOutputStream());

final byte[] fileBuffer = new byte[8192];

byte[] encriptFileBuffer = new byte[8192];
if (FileActivity.file.exists()){
    Log.d("Send", "файл существует");
}
FileActivity.file.createNewFile();
Log.d("Send", " file: " + FileActivity.file.getPath());
FileInputStream fis = new FileInputStream(FileActivity.file.getPath());

long fileSizeByte;
fileSizeByte = FileActivity.file.length();
while (fileSizeByte > 0) {
    int i = fis.read(fileBuffer);
    encriptFileBuffer = Kuz.Encript(fileBuffer, key );
    outputStream.write(encriptFileBuffer, 0, i);
    Log.d("Send", "отправил encriptFileBuffer");

    fileSizeByte -= i;
}
Log.d("Send", "отправил file");
outputStream.flush();
fis.close();

Ответы (0 шт):