Если вы используете Java 9 или выше, вы можете использовать InputStream.transferTo(OutputStream out)
:
is.transferTo(fos);
Если вы используете более старую версию Java, вот исходный код transferTo
метод:
public long transferTo(OutputStream out) throws IOException {
Objects.requireNonNull(out, "out");
long transferred = 0;
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int read;
while ((read = this.read(buffer, 0, DEFAULT_BUFFER_SIZE)) >= 0) {
out.write(buffer, 0, read);
transferred += read;
}
return transferred;
}
MAX_BUFFER_SIZE
равен 8192.
В основном вы должны делать то же самое в то время как цикл while. Возможно, вам не нужно считать переданные байты, поэтому вы можете не указывать это.
Итак, оба ваших примера будут выглядеть так:
try {
Socket sr = new Socket("192.168.192.41", 30481);
InputStream is = sr.getInputStream();
FileOutputStream fos = new FileOutputStream("C:\\Users\\tproudfoot\\Desktop\\Photo.png");
byte[] buffer = new byte[8192];
while ((read = is.read(buffer, 0 buffer.length)) >= 0) {
fos.write(buffer, 0, read);
}
} catch (Exception e) {
e.printStackTrace();
}
и
try {
File f = new File(Path);
long size = f.length();
System.out.println(size);
ServerSocket s = new ServerSocket(30481);
Socket sr = s.accept();
FileInputStream fis = new FileInputStream(Path);
OutputStream os = sr.getOutputStream();
byte[] buffer = new byte[8192];
int read;
while ((read = fis.read(buffer, 0, buffer.length)) >= 0) {
os.write(buffer, 0, read);
}
} catch (Exception e) {
e.printStackTrace();
}