content: package com.alibaba.json.bvt.bug;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import org.junit.Assert;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.JSONArray;
  import com.alibaba.fastjson.JSONObject;
  import com.alibaba.fastjson.serializer.SerializeWriter;
  import com.alibaba.fastjson.serializer.SerializerFeature;
  
  import junit.framework.TestCase;
  
  public class Issue771 extends TestCase {
  
      public void test_for_issue() throws Exception {
          SerializeWriter writer = new SerializeWriter(null, JSON.DEFAULT_GENERATE_FEATURE, new SerializerFeature[0]);
          int defaultBufferSize = writer.getBufferLength();
          String encoded = JSON.toJSONString(new FooBar(defaultBufferSize));
          JSONObject decoded = (JSONObject) JSON.parse(encoded);
          JSONArray dataToEncode = decoded.getJSONArray("dataToEncode"); 
          Assert.assertEquals(5, dataToEncode.size());
          writer.close();
      }
  
      public static class FooBar {
  
          private List<String> dataToEncode;
  
          protected FooBar(int buffLen){
              dataToEncode = new ArrayList<String>();
              dataToEncode.add("foo");
              dataToEncode.add("bar");
              dataToEncode.add(new String(new char[buffLen]).replace('\0', 'a')); // create some texts to fill up & expand
                                                                                  // the buffer
              dataToEncode.add("a wild special character appears: áőű"); // this will restart the list encoding (while the
                                                                         // count is committed at expand)
              dataToEncode.add("foobar");
          }
  
          public List<String> getDataToEncode() {
              return dataToEncode;
          }
      }
  }
  