Android 优化输出流写入
我有一个优化问题。我有一个视频文件(.mp4)加载到我的android程序中。这个文件是67兆字节。我想通过串行连接将此文件转换为字节数组。波特率为115200波特。我可以很好地收到我的信息。问题是,完全到达对方需要一个多小时。有没有办法改进我下面的代码Android 优化输出流写入,android,stream,outputstream,Android,Stream,Outputstream,我有一个优化问题。我有一个视频文件(.mp4)加载到我的android程序中。这个文件是67兆字节。我想通过串行连接将此文件转换为字节数组。波特率为115200波特。我可以很好地收到我的信息。问题是,完全到达对方需要一个多小时。有没有办法改进我下面的代码 OutputStream out = serverConnection.getOutputStream(); FmiClientConsole.consoleAppendString("video l
OutputStream out = serverConnection.getOutputStream();
FmiClientConsole.consoleAppendString("video length: " + this.video.length);
byte[][] byteArrayChunks = createArrayChunk(this.video, 4096);
int count = 0;
FmiClientConsole.consoleAppendString("length total: " + byteArrayChunks.length);
for (byte[] chunk : byteArrayChunks) {
FmiClientConsole.consoleAppendString("len: " + chunk.length);
out.write(chunk, 0 , chunk.length);
FmiClientConsole.consoleAppendString("count: " + count);
count++;
}
out.flush();
创建数组块方法
private static byte[][] createArrayChunk(byte[] array, int chunkSize) {
int numOfChunks = (int) Math.ceil((double) array.length / chunkSize);
byte[][] output = new byte[numOfChunks][];
for (int i = 0; i < numOfChunks; i++) {
int start = i * chunkSize;
int length = Math.min(array.length - start, chunkSize);
byte[] temp = new byte[length];
System.arraycopy(array, start, temp, 0, length);
output[i] = temp;
}
//
return output;
}
private static byte[]createArrayChunk(byte[]array,int chunkSize){
int numockhunks=(int)Math.ceil((double)array.length/chunkSize);
字节[][]输出=新字节[numOfChunks][];
for(int i=0;i
我应该注意到,我在优化或多线程方面没有太多经验。我的数组块是4096字节,因为outputstream不断给我一个indexoutofrangeexception,如果我的值远远高于这个值
感谢您的帮助责怪您的代码对吗?您计算过用115200波特传输67MB字节需要多少时间吗?请告诉我。
this.video
内存中有67MB吗?byte[]byteArrayChunks=createArrayChunk(this.video,4096)代码>现在你又在内存中放了67MB!!?这看起来不是一个好办法。您可能会遇到内存问题。你一开始不需要这个结构。非常感谢任何帮助
这就是我告诉你的原因。out.write(this.video);你试过了吗?这个.video是一个67MB的字节数组(一个.mp4文件),据我所知它不会被压缩那么多。尝试一次写入所有文件会导致indexoutofbounds异常,因为outputstream有其限制。