Skip to content

Commit 35e301e

Browse files
author
YangSen-qn
committed
upload list use ListVector
1 parent eeec951 commit 35e301e

File tree

4 files changed

+289
-86
lines changed

4 files changed

+289
-86
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.qiniu.android;
2+
3+
import com.qiniu.android.utils.ListVector;
4+
5+
import junit.framework.Assert;
6+
7+
import java.util.List;
8+
9+
public class ListVectorTest extends BaseTest {
10+
11+
public void testVectorList() {
12+
13+
final int count = 1000;
14+
final ListVector<String> v = new ListVector<>();
15+
16+
new Thread(new Runnable() {
17+
@Override
18+
public void run() {
19+
while (v.size() < count) {
20+
vectorAdd(v);
21+
}
22+
}
23+
}).start();
24+
25+
while (v.size() < count) {
26+
vectorList(v);
27+
}
28+
29+
Assert.assertTrue("v:" + v, v.size() == count);
30+
}
31+
32+
public void testVectorSubList() {
33+
34+
final int count = 1000;
35+
final ListVector<String> listVector = new ListVector<>();
36+
37+
while (listVector.size() < count) {
38+
vectorAdd(listVector);
39+
}
40+
41+
final ListVector<String> v = listVector.subList(0, count/2);
42+
43+
new Thread(new Runnable() {
44+
@Override
45+
public void run() {
46+
while (v.size() < count) {
47+
vectorAdd(v);
48+
}
49+
}
50+
}).start();
51+
52+
53+
while (v.size() < count) {
54+
vectorList(v);
55+
}
56+
57+
Assert.assertTrue("v:" + v, v.size() == count);
58+
}
59+
60+
private void vectorAdd(List<String> v) {
61+
String e = v.size() + "";
62+
v.add(e);
63+
System.out.println("add e:" + e);
64+
}
65+
66+
private void vectorList(ListVector<String> v) {
67+
final int size = v.size();
68+
v.enumerateObjects(new ListVector.EnumeratorHandler<String>() {
69+
@Override
70+
public boolean enumerate(String s) {
71+
System.out.println("size:" + size + " value:" + s);
72+
return false;
73+
}
74+
});
75+
}
76+
}

library/src/main/java/com/qiniu/android/storage/UploadInfoV1.java

Lines changed: 82 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.qiniu.android.storage;
22

33
import com.qiniu.android.utils.BytesUtils;
4+
import com.qiniu.android.utils.ListVector;
45
import com.qiniu.android.utils.MD5;
56
import com.qiniu.android.utils.StringUtils;
67

@@ -11,7 +12,6 @@
1112
import java.io.IOException;
1213
import java.util.ArrayList;
1314
import java.util.List;
14-
import java.util.Vector;
1515

1616
class UploadInfoV1 extends UploadInfo {
1717

@@ -21,12 +21,12 @@ class UploadInfoV1 extends UploadInfo {
2121
private static final int BlockListCapacityIncrement = 2;
2222

2323
private final int dataSize;
24-
private List<UploadBlock> blockList;
24+
private ListVector<UploadBlock> blockList;
2525

2626
private boolean isEOF = false;
2727
private IOException readException = null;
2828

29-
private UploadInfoV1(UploadSource source, int dataSize, List<UploadBlock> blockList) {
29+
private UploadInfoV1(UploadSource source, int dataSize, ListVector<UploadBlock> blockList) {
3030
super(source);
3131
this.dataSize = dataSize;
3232
this.blockList = blockList;
@@ -39,7 +39,7 @@ private UploadInfoV1(UploadSource source, int dataSize, List<UploadBlock> blockL
3939
} else {
4040
this.dataSize = configuration.chunkSize;
4141
}
42-
this.blockList = new Vector<>(BlockListCapacityIncrement, BlockListCapacityIncrement);
42+
this.blockList = new ListVector<>(BlockListCapacityIncrement, BlockListCapacityIncrement);
4343
}
4444

4545
static UploadInfoV1 infoFromJson(UploadSource source, JSONObject jsonObject) {
@@ -49,12 +49,12 @@ static UploadInfoV1 infoFromJson(UploadSource source, JSONObject jsonObject) {
4949

5050
int dataSize = 0;
5151
String type = null;
52-
List<UploadBlock> blockList = null;
52+
ListVector<UploadBlock> blockList = null;
5353
try {
5454
type = jsonObject.optString(TypeKey);
5555
dataSize = jsonObject.getInt("dataSize");
5656
JSONArray blockJsonArray = jsonObject.getJSONArray("blockList");
57-
blockList = new Vector<>(blockJsonArray.length(), BlockListCapacityIncrement);
57+
blockList = new ListVector<>(blockJsonArray.length(), BlockListCapacityIncrement);
5858
for (int i = 0; i < blockJsonArray.length(); i++) {
5959
JSONObject blockJson = blockJsonArray.getJSONObject(i);
6060
try {
@@ -109,21 +109,30 @@ void clearUploadState() {
109109
if (blockList == null || blockList.size() == 0) {
110110
return;
111111
}
112-
for (UploadBlock block : blockList) {
113-
block.clearUploadState();
114-
}
112+
113+
blockList.enumerateObjects(new ListVector.EnumeratorHandler<UploadBlock>() {
114+
@Override
115+
public boolean enumerate(UploadBlock block) {
116+
block.clearUploadState();
117+
return false;
118+
}
119+
});
115120
}
116121

117122
@Override
118123
long uploadSize() {
119124
if (blockList == null || blockList.size() == 0) {
120125
return 0;
121126
}
122-
long uploadSize = 0;
123-
for (UploadBlock block : blockList) {
124-
uploadSize += block.uploadSize();
125-
}
126-
return uploadSize;
127+
final long[] uploadSize = {0};
128+
blockList.enumerateObjects(new ListVector.EnumeratorHandler<UploadBlock>() {
129+
@Override
130+
public boolean enumerate(UploadBlock block) {
131+
uploadSize[0] += block.uploadSize();
132+
return false;
133+
}
134+
});
135+
return uploadSize[0];
127136
}
128137

129138
// 文件已经读取结束 & 所有块均上传
@@ -136,21 +145,30 @@ boolean isAllUploaded() {
136145
if (blockList == null || blockList.size() == 0) {
137146
return true;
138147
}
139-
boolean isAllUploaded = true;
140-
for (UploadBlock block : blockList) {
141-
if (!block.isCompleted()) {
142-
isAllUploaded = false;
143-
break;
148+
final boolean[] isAllUploaded = {true};
149+
blockList.enumerateObjects(new ListVector.EnumeratorHandler<UploadBlock>() {
150+
@Override
151+
public boolean enumerate(UploadBlock block) {
152+
if (!block.isCompleted()) {
153+
isAllUploaded[0] = false;
154+
return true;
155+
} else {
156+
return false;
157+
}
144158
}
145-
}
146-
return isAllUploaded;
159+
});
160+
return isAllUploaded[0];
147161
}
148162

149163
@Override
150164
void checkInfoStateAndUpdate() {
151-
for (UploadBlock block : blockList) {
152-
block.checkInfoStateAndUpdate();
153-
}
165+
blockList.enumerateObjects(new ListVector.EnumeratorHandler<UploadBlock>() {
166+
@Override
167+
public boolean enumerate(UploadBlock block) {
168+
block.checkInfoStateAndUpdate();
169+
return false;
170+
}
171+
});
154172
}
155173

156174
@Override
@@ -163,12 +181,24 @@ JSONObject toJsonObject() {
163181
jsonObject.put(TypeKey, TypeValue);
164182
jsonObject.put("dataSize", dataSize);
165183
if (blockList != null && blockList.size() > 0) {
166-
JSONArray blockJsonArray = new JSONArray();
167-
for (UploadBlock block : blockList) {
168-
JSONObject blockJson = block.toJsonObject();
169-
if (blockJson != null) {
170-
blockJsonArray.put(blockJson);
184+
final JSONArray blockJsonArray = new JSONArray();
185+
blockList.enumerateObjects(new ListVector.EnumeratorHandler<UploadBlock>() {
186+
@Override
187+
public boolean enumerate(UploadBlock block) {
188+
try {
189+
JSONObject blockJson = block.toJsonObject();
190+
if (blockJson != null) {
191+
blockJsonArray.put(blockJson);
192+
}
193+
} catch (Exception e) {
194+
return true;
195+
}
196+
return false;
171197
}
198+
});
199+
200+
if (blockJsonArray.length() != blockList.size()) {
201+
return null;
172202
}
173203
jsonObject.put("blockList", blockJsonArray);
174204
}
@@ -243,15 +273,20 @@ private UploadBlock nextUploadBlockFormBlockList() {
243273
if (blockList == null || blockList.size() == 0) {
244274
return null;
245275
}
246-
UploadBlock block = null;
247-
for (UploadBlock blockP : blockList) {
248-
UploadData data = blockP.nextUploadDataWithoutCheckData();
249-
if (data != null) {
250-
block = blockP;
251-
break;
276+
final UploadBlock[] blocks = {null};
277+
blockList.enumerateObjects(new ListVector.EnumeratorHandler<UploadBlock>() {
278+
@Override
279+
public boolean enumerate(UploadBlock block) {
280+
UploadData data = block.nextUploadDataWithoutCheckData();
281+
if (data != null) {
282+
blocks[0] = block;
283+
return true;
284+
} else {
285+
return false;
286+
}
252287
}
253-
}
254-
return block;
288+
});
289+
return blocks[0];
255290
}
256291

257292

@@ -324,13 +359,17 @@ ArrayList<String> allBlocksContexts() {
324359
if (blockList == null || blockList.size() == 0) {
325360
return null;
326361
}
327-
ArrayList<String> contexts = new ArrayList<String>();
328-
for (UploadBlock block : blockList) {
329-
String ctx = block.ctx;
330-
if (!StringUtils.isNullOrEmpty(ctx)) {
331-
contexts.add(ctx);
362+
final ArrayList<String> contexts = new ArrayList<String>();
363+
blockList.enumerateObjects(new ListVector.EnumeratorHandler<UploadBlock>() {
364+
@Override
365+
public boolean enumerate(UploadBlock block) {
366+
String ctx = block.ctx;
367+
if (!StringUtils.isNullOrEmpty(ctx)) {
368+
contexts.add(ctx);
369+
}
370+
return false;
332371
}
333-
}
372+
});
334373
return contexts;
335374
}
336375
}

0 commit comments

Comments
 (0)