11package com .qiniu .android .storage ;
22
33import com .qiniu .android .utils .BytesUtils ;
4+ import com .qiniu .android .utils .ListVector ;
45import com .qiniu .android .utils .MD5 ;
56import com .qiniu .android .utils .StringUtils ;
67
1112import java .io .IOException ;
1213import java .util .ArrayList ;
1314import java .util .List ;
14- import java .util .Vector ;
1515
1616class 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