日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

组织机构代码输入测试用例_测试代码以用于过大的输入

發布時間:2023/12/3 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 组织机构代码输入测试用例_测试代码以用于过大的输入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

組織機構代碼輸入測試用例

在編寫單元測試時,我們主要關注業務的正確性。 我們將竭盡所能,開開心心地走在最前沿。 我們有時會進行微基準測試并衡量吞吐量。 但是經常遺漏的一個方面是當輸入過大時我們的代碼如何表現? 我們測試了如何處理正常的輸入文件,格式錯誤的文件,空文件,丟失的文件……但是對于超大的輸入文件呢?

讓我們從一個真實的用例開始。 您已獲得將GPX ( GPS交換格式 ,基本上為XML)實現為JSON轉換的任務。 我之所以選擇GPX并不是出于特殊原因,它只是您可能遇到的另一種XML格式,例如在用GPS接收器記錄遠足或騎自行車時。 我還認為使用XML中的一些標準而不是另一個“人員數據庫”會很好。 在GPX文件中,有數百個平面<wpt/>條目,每個條目代表時空的一個點:

<gpx><wpt lat="42.438878" lon="-71.119277"><ele>44.586548</ele><time>2001-11-28T21:05:28Z</time><name>5066</name><desc><![CDATA[5066]]></desc><sym>Crossing</sym><type><![CDATA[Crossing]]></type></wpt><wpt lat="42.439227" lon="-71.119689"><ele>57.607200</ele><time>2001-06-02T03:26:55Z</time><name>5067</name><desc><![CDATA[5067]]></desc><sym>Dot</sym><type><![CDATA[Intersection]]></type></wpt><!-- ...more... --> </gpx>

完整示例: www.topografix.com/fells_loop.gpx 。 我們的任務是提取每個單獨的<wpt/>元素,丟棄沒有lat或lon屬性的元素,并以以下格式存儲回JSON:

[{"lat": 42.438878,"lon": -71.119277},{"lat": 42.439227,"lon": -71.119689}...more... ]

這很簡單! 首先,我從使用JDK和GPX 1.0 XSD架構的 xjc實用程序生成JAXB類開始。 請注意,GPX 1.1是撰寫本文時的最新版本,但是我得到的示例使用1.0。 對于JSON編組,我使用了Jackson 。 完整,可運行且經過測試的程序如下所示:

import org.apache.commons.io.FileUtils; import org.codehaus.jackson.map.ObjectMapper; import javax.xml.bind.JAXBException;public class GpxTransformation {private final ObjectMapper jsonMapper = new ObjectMapper();private final JAXBContext jaxbContext;public GpxTransformation() throws JAXBException {jaxbContext = JAXBContext.newInstance("com.topografix.gpx._1._0");}public void transform(File inputFile, File outputFile) throws JAXBException, IOException {final List<Gpx.Wpt> waypoints = loadWaypoints(inputFile);final List<LatLong> coordinates = toCoordinates(waypoints);dumpJson(coordinates, outputFile);}private List<Gpx.Wpt> loadWaypoints(File inputFile) throws JAXBException, IOException {String xmlContents = FileUtils.readFileToString(inputFile, UTF_8);final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();final Gpx gpx = (Gpx) unmarshaller.unmarshal(new StringReader(xmlContents));return gpx.getWpt();}private static List<LatLong> toCoordinates(List<Gpx.Wpt> waypoints) {return waypoints.stream().filter(wpt -> wpt.getLat() != null).filter(wpt -> wpt.getLon() != null).map(LatLong::new).collect(toList());}private void dumpJson(List<LatLong> coordinates, File outputFile) throws IOException {final String resultJson = jsonMapper.writeValueAsString(coordinates);FileUtils.writeStringToFile(outputFile, resultJson);}}class LatLong {private final double lat;private final double lon;LatLong(Gpx.Wpt waypoint) {this.lat = waypoint.getLat().doubleValue();this.lon = waypoint.getLon().doubleValue();}public double getLat() { return lat; }public double getLon() { return lon; } }

看起來還不錯,盡管我故意留下了一些陷阱。 我們加載GPX XML文件,將航點提取到List ,然后將該列表轉換為輕量級的LatLong對象,首先過濾掉損壞的航點。 最后,我們將List<LatLong>轉儲到磁盤。 然而,有一天,極其漫長的自行車騎行使我們的系統因OutOfMemoryError崩潰。 你知道發生什么了嗎? 上傳到我們的應用程序中的GPX文件很大,比我們預期的要大得多。 現在再看一下上面的實現,并計算在多少個地方分配了必要的內存?

但是,如果要立即進行重構,請就在此處停止! 我們想練習TDD,對嗎? 我們想在代碼中限制WTF /分鐘因素嗎? 我有一個理論,許多“ WTF”不是由粗心和缺乏經驗的程序員引起的。 通常是由于這些周五晚些時候的生產問題,完全出乎意料的輸入和不可預測的副作用。 代碼獲得了越來越多的變通辦法,難以理解的重構,以及比人們預期的更復雜的邏輯。 有時不希望使用錯誤的代碼,但是由于我們早已忘記了這種情況,因此需要使用錯誤的代碼。 因此,如果有一天您看到不可能發生的null檢查或可能已被庫替換的手寫代碼,請考慮上下文。 話雖這么說,讓我們從編寫測試證明我們的未來重構開始。 如果有一天某人“固定”我們的代碼,并假設“這位愚蠢的程序員”在沒有充分理由的情況下使事情復雜化,那么自動化測試將準確地說明原因 。

我們的測試將僅嘗試轉換瘋狂的大輸入文件。 但是在開始之前,我們必須對原始實現進行一些重構,以使它實現InputStream和OutputStream而不是輸入和輸出File -沒有理由將我們的實現僅限于文件系統:

步驟0a:使其可測試

import org.apache.commons.io.IOUtils;public class GpxTransformation {//...public void transform(File inputFile, File outputFile) throws JAXBException, IOException {try (InputStream input =new BufferedInputStream(new FileInputStream(inputFile));OutputStream output =new BufferedOutputStream(new FileOutputStream(outputFile))) {transform(input, output);}}public void transform(InputStream input, OutputStream output) throws JAXBException, IOException {final List<Gpx.Wpt> waypoints = loadWaypoints(input);final List<LatLong> coordinates = toCoordinates(waypoints);dumpJson(coordinates, output);}private List<Gpx.Wpt> loadWaypoints(InputStream input) throws JAXBException, IOException {String xmlContents = IOUtils.toString(input, UTF_8);final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();final Gpx gpx = (Gpx) unmarshaller.unmarshal(new StringReader(xmlContents));return gpx.getWpt();}//...private void dumpJson(List<LatLong> coordinates, OutputStream output) throws IOException {final String resultJson = jsonMapper.writeValueAsString(coordinates);output.write(resultJson.getBytes(UTF_8));}}

步驟0b:編寫輸入(壓力)測試

輸入將從頭使用來產生repeat(byte[] sample, int times)實用程序開發較早 。 基本上,我們將重復數百萬次相同的<wpt/>項,并用GPX頁眉和頁腳將其包裝起來,以便其格式正確。 通常,我會考慮將樣本放在src/test/resources ,但我希望此代碼能夠自我包含。 注意,我們既不在乎實際的輸入,也不在乎輸出。 這已經過測試。 如果轉換成功(如果需要,我們可以添加一些超時),那么就可以了。 如果由于任何異常而失敗,很可能是OutOfMemoryError ,則是測試失敗(錯誤):

import org.apache.commons.io.FileUtils import org.apache.commons.io.output.NullOutputStream import spock.lang.Specification import spock.lang.Unrollimport static org.apache.commons.io.FileUtils.ONE_GB import static org.apache.commons.io.FileUtils.ONE_KB import static org.apache.commons.io.FileUtils.ONE_MB@Unroll class LargeInputSpec extends Specification {final GpxTransformation transformation = new GpxTransformation()final byte[] header = """<?xml version="1.0"?><gpxversion="1.0"creator="ExpertGPS 1.1 - http://www.topografix.com"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.topografix.com/GPX/1/0"xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd"><time>2002-02-27T17:18:33Z</time>""".getBytes(UTF_8)final byte[] gpxSample = """<wpt lat="42.438878" lon="-71.119277"><ele>44.586548</ele><time>2001-11-28T21:05:28Z</time><name>5066</name><desc><![CDATA[5066]]></desc><sym>Crossing</sym><type><![CDATA[Crossing]]></type></wpt>""".getBytes(UTF_8)final byte[] footer = """</gpx>""".getBytes(UTF_8)def "Should not fail with OOM for input of size #readableBytes"() {given:int repeats = size / gpxSample.lengthInputStream xml = withHeaderAndFooter(RepeatedInputStream.repeat(gpxSample, repeats))expect:transformation.transform(xml, new NullOutputStream())where:size << [ONE_KB, ONE_MB, 10 * ONE_MB, 100 * ONE_MB, ONE_GB, 8 * ONE_GB, 32 * ONE_GB]readableBytes = FileUtils.byteCountToDisplaySize(size)}private InputStream withHeaderAndFooter(InputStream samples) {InputStream withHeader = new SequenceInputStream(new ByteArrayInputStream(header), samples)return new SequenceInputStream(withHeader, new ByteArrayInputStream(footer))} }

實際上,這里有7個測試,運行GPX到JSON轉換以輸入大小:1 KiB,1 MiB,10 MiB,100 MiB,1 GiB,8 GiB和32 GiB。 我在JDK 8u11x64上使用以下選項運行這些測試: -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xmx1g 。 1 GiB的內存很多,但顯然不能容納整個輸入文件在內存中:

當小測試通過時,高于1 GiB的輸入將快速失敗。

步驟1:避免將整個文件保留在

堆棧跟蹤揭示了問題所在:

java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:3326)at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137)at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121)at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:569)at java.lang.StringBuilder.append(StringBuilder.java:190)at org.apache.commons.io.output.StringBuilderWriter.write(StringBuilderWriter.java:138)at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2002)at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1980)at org.apache.commons.io.IOUtils.copy(IOUtils.java:1957)at org.apache.commons.io.IOUtils.copy(IOUtils.java:1907)at org.apache.commons.io.IOUtils.toString(IOUtils.java:778)at com.nurkiewicz.gpx.GpxTransformation.loadWaypoints(GpxTransformation.java:56)at com.nurkiewicz.gpx.GpxTransformation.transform(GpxTransformation.java:50)

loadWaypoints急切地將input GPX文件加載到String (請參閱: IOUtils.toString(input, UTF_8) ),以便稍后對其進行解析。 這有點愚蠢,尤其是因為JAXB Unmarshaller可以輕松地直接讀取InputStream 。 讓我們修復它:

private List<Gpx.Wpt> loadWaypoints(InputStream input) throws JAXBException, IOException {final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();final Gpx gpx = (Gpx) unmarshaller.unmarshal(input);return gpx.getWpt(); }private void dumpJson(List<LatLong> coordinates, OutputStream output) throws IOException {jsonMapper.writeValue(output, coordinates); }

同樣,我們修復了dumpJson因為它首先將JSON轉儲到String ,然后將該String復制到OutputStream 。 結果略好一些,但再次出現1 GiB失敗,這一次是進入Full GC的無限死亡循環并最終拋出:

java.lang.OutOfMemoryError: Java heap spaceat com.sun.xml.internal.bind.v2.runtime.unmarshaller.LeafPropertyLoader.text(LeafPropertyLoader.java:50)at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.text(UnmarshallingContext.java:527)at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.processText(SAXConnector.java:208)at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:171)at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609)[...snap...]at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649)at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:243)at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:214)at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:204)at com.nurkiewicz.gpx.GpxTransformation.loadWaypoints(GpxTransformation.java:54)at com.nurkiewicz.gpx.GpxTransformation.transform(GpxTransformation.java:47)

第2步:(不好)用StAX替換JAXB

我們可以懷疑,現在的主要問題是使用JAXB進行XML解析,JAXB總是將整個XML文件映射到Java對象中。 很難想象為什么將1 GiB文件轉換為對象圖會失敗。 我們希望以某種方式更好地控制讀取XML并將其分塊使用。 傳統上在這種情況下使用SAX,但是SAX API中的推式編程模型非常不便。 SAX使用回調機制,該機制具有很高的侵入性,并且不易讀。 StAX(用于XML的流API)在更高級別上工作,公開了拉模型。 這意味著客戶代碼決定何時以及消耗多少輸入。 這使我們可以更好地控制輸入,并具有更大的靈活性。 為了使您熟悉該API,以下代碼幾乎等同于loadWaypoints() ,但是我跳過了<wpt/>屬性,這些屬性以后不再需要:

private List<Gpx.Wpt> loadWaypoints(InputStream input) throws JAXBException, IOException, XMLStreamException {final XMLInputFactory factory = XMLInputFactory.newInstance();final XMLStreamReader reader = factory.createXMLStreamReader(input);final List<Gpx.Wpt> waypoints = new ArrayList<>();while (reader.hasNext()) {switch (reader.next()) {case XMLStreamConstants.START_ELEMENT:if (reader.getLocalName().equals("wpt")) {waypoints.add(parseWaypoint(reader));}break;}}return waypoints; }private Gpx.Wpt parseWaypoint(XMLStreamReader reader) {final Gpx.Wpt wpt = new Gpx.Wpt();final String lat = reader.getAttributeValue("", "lat");if (lat != null) {wpt.setLat(new BigDecimal(lat));}final String lon = reader.getAttributeValue("", "lon");if (lon != null) {wpt.setLon(new BigDecimal(lon));}return wpt; }

看看我們如何明確地向XMLStreamReader請求更多數據? 然而事實是,我們正在使用更多的低級別的API( 和更大量的代碼),并不意味著它必須是更好的,如果使用不當。 我們一直在構建龐大的waypoints列表,因此再次看到OutOfMemoryError也就不足為奇了:

java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:3204)at java.util.Arrays.copyOf(Arrays.java:3175)at java.util.ArrayList.grow(ArrayList.java:246)at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:220)at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:212)at java.util.ArrayList.add(ArrayList.java:443)at com.nurkiewicz.gpx.GpxTransformation.loadWaypoints(GpxTransformation.java:65)at com.nurkiewicz.gpx.GpxTransformation.transform(GpxTransformation.java:52)

正是我們所期望的。 好消息是,1個吉布測試通過(1個吉布堆),所以我們有幾分在正確的方向前進。 但是由于GC過多,需要1分鐘才能完成。

步驟3:正確實施StAX

注意,在上一個示例中使用StAX的實現與SAX一樣好。 但是,我選擇StAX的原因是我們現在可以將XML文件轉換為Iterator<Gpx.Wpt> 。 該迭代器僅在被詢問時才懶散地使用XML文件。 以后我們也可以延遲使用該迭代器,這意味著我們不再將整個文件保留在內存中。 迭代器雖然笨拙,但是比直接使用XML或使用SAX回調要好得多:

import com.google.common.collect.AbstractIterator;private Iterator<Gpx.Wpt> loadWaypoints(InputStream input) throws JAXBException, IOException, XMLStreamException {final XMLInputFactory factory = XMLInputFactory.newInstance();final XMLStreamReader reader = factory.createXMLStreamReader(input);return new AbstractIterator<Gpx.Wpt>() {@Overrideprotected Gpx.Wpt computeNext() {try {return tryPullNextWaypoint();} catch (XMLStreamException e) {throw Throwables.propagate(e);}}private Gpx.Wpt tryPullNextWaypoint() throws XMLStreamException {while (reader.hasNext()) {int event = reader.next();switch (event) {case XMLStreamConstants.START_ELEMENT:if (reader.getLocalName().equals("wpt")) {return parseWaypoint(reader);}break;case XMLStreamConstants.END_ELEMENT:if (reader.getLocalName().equals("gpx")) {return endOfData();}break;}}throw new IllegalStateException("XML file didn't finish with </gpx> element, malformed?");}}; }

這變得越來越復雜! 我正在使用來自Guava的AbstractIterator來處理乏味的hasNext()狀態。 每當有人嘗試從迭代器中提取下一個Gpx.Wpt項(或調用hasNext() )時,我們都會消耗一點XML,足以返回一個條目。 如果XMLStreamReader遇到XML的結尾( </gpx>標記),我們將通過返回endOfData()通知迭代器結束。 這是一個非常方便的模式,其中XML被懶惰地讀取并通過方便的迭代器提供服務。 僅此實現就消耗很少的,恒定的內存量。 但是,我們將API從List<Gpx.Wpt>更改為Iterator<Gpx.Wpt> ,這將強制更改其余實現:

private static List<LatLong> toCoordinates(Iterator<Gpx.Wpt> waypoints) {final Spliterator<Gpx.Wpt> spliterator =Spliterators.spliteratorUnknownSize(waypoints, Spliterator.ORDERED);return StreamSupport.stream(spliterator, false).filter(wpt -> wpt.getLat() != null).filter(wpt -> wpt.getLon() != null).map(LatLong::new).collect(toList()); }

toCoordinates()以前接受List<Gpx.Wpt> 。 迭代器無法直接轉換為Stream ,因此我們需要通過Spliterator笨拙的轉換。 你認為結束了嗎? ! GiB測試通過得更快一些,但要求更高的測試卻像以前一樣失敗了:

java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOf(Arrays.java:3175)at java.util.ArrayList.grow(ArrayList.java:246)at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:220)at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:212)at java.util.ArrayList.add(ArrayList.java:443)at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)at java.util.Iterator.forEachRemaining(Iterator.java:116)at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)at com.nurkiewicz.gpx.GpxTransformation.toCoordinates(GpxTransformation.java:118)at com.nurkiewicz.gpx.GpxTransformation.transform(GpxTransformation.java:58)at com.nurkiewicz.LargeInputSpec.Should not fail with OOM for input of size #readableBytes(LargeInputSpec.groovy:49)

請記住,并非總是從實際上消耗大量內存的地方拋出OutOfMemoryError 。 幸運的是,這次并非如此。 仔細查看底部: collect(toList()) 。

步驟4:避免流和收集器

這真令人失望。 溪流和收集器的設計完全是為了支持懶惰。 但是,實際上不可能有效地實現從流到迭代器的收集器(另請參見: Java 8中編寫自定義收集器以及分組,采樣和批處理–自定義收集器的簡介 ),這是一個很大的設計缺陷。 因此,我們必須完全忘記流,并一直使用簡單的迭代器。 迭代器不是很優雅,但是可以逐項消耗輸入,可以完全控制內存消耗。 我們需要一種方法filter()輸入迭代器,丟棄損壞的項并將map()條目map()到另一個表示形式。 番石榴再次提供了一些方便的實用程序,完全替換了stream() :

private static Iterator<LatLong> toCoordinates(Iterator<Gpx.Wpt> waypoints) {final Iterator<Gpx.Wpt> filtered = Iterators.filter(waypoints, wpt -> wpt.getLat() != null && wpt.getLon() != null);return Iterators.transform(filtered, LatLong::new); }

Iterator<Gpx.Wpt>在, Iterator<LatLong>出。 沒有進行任何處理,幾乎沒有觸及XML文件,幾乎沒有內存消耗。 幸運的是,Jackson接受了迭代器并透明地讀取它們,從而迭代生成JSON。 因此,存儲器消耗也保持較低。 猜猜是什么,我們做到了!

內存消耗低且穩定,我認為我們可以放心地假設它是恒定的。 我們的代碼處理速度約為40 MiB / s,因此處理32 GiB大約需要14分鐘,不要感到驚訝。 哦,我是否提到我使用-Xmx32M運行了最后一個測試? 沒錯,使用較少的數千倍內存即可成功處理32 GiB,而不會造成任何性能損失。 與最初實施相比,減少了3000倍。 事實上,最后一個使用迭代器的解決方案甚至能夠處理無限的XML流。 這實際上不只是理論上的情況,想象一下某種流API會產生永無止境的消息流…

最終實施

這是我們完整的代碼:

package com.nurkiewicz.gpx;import com.google.common.base.Throwables; import com.google.common.collect.AbstractIterator; import com.google.common.collect.Iterators; import com.topografix.gpx._1._0.Gpx; import org.codehaus.jackson.map.ObjectMapper;import javax.xml.bind.JAXBException; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.math.BigDecimal; import java.util.Iterator;public class GpxTransformation {private static final ObjectMapper jsonMapper = new ObjectMapper();public void transform(File inputFile, File outputFile) throws JAXBException, IOException, XMLStreamException {try (InputStream input =new BufferedInputStream(new FileInputStream(inputFile));OutputStream output =new BufferedOutputStream(new FileOutputStream(outputFile))) {transform(input, output);}}public void transform(InputStream input, OutputStream output) throws JAXBException, IOException, XMLStreamException {final Iterator<Gpx.Wpt> waypoints = loadWaypoints(input);final Iterator<LatLong> coordinates = toCoordinates(waypoints);dumpJson(coordinates, output);}private Iterator<Gpx.Wpt> loadWaypoints(InputStream input) throws JAXBException, IOException, XMLStreamException {final XMLInputFactory factory = XMLInputFactory.newInstance();final XMLStreamReader reader = factory.createXMLStreamReader(input);return new AbstractIterator<Gpx.Wpt>() {@Overrideprotected Gpx.Wpt computeNext() {try {return tryPullNextWaypoint();} catch (XMLStreamException e) {throw Throwables.propagate(e);}}private Gpx.Wpt tryPullNextWaypoint() throws XMLStreamException {while (reader.hasNext()) {int event = reader.next();switch (event) {case XMLStreamConstants.START_ELEMENT:if (reader.getLocalName().equals("wpt")) {return parseWaypoint(reader);}break;case XMLStreamConstants.END_ELEMENT:if (reader.getLocalName().equals("gpx")) {return endOfData();}break;}}throw new IllegalStateException("XML file didn't finish with </gpx> element, malformed?");}};}private Gpx.Wpt parseWaypoint(XMLStreamReader reader) {final Gpx.Wpt wpt = new Gpx.Wpt();final String lat = reader.getAttributeValue("", "lat");if (lat != null) {wpt.setLat(new BigDecimal(lat));}final String lon = reader.getAttributeValue("", "lon");if (lon != null) {wpt.setLon(new BigDecimal(lon));}return wpt;}private static Iterator<LatLong> toCoordinates(Iterator<Gpx.Wpt> waypoints) {final Iterator<Gpx.Wpt> filtered = Iterators.filter(waypoints, wpt ->wpt.getLat() != null &&wpt.getLon() != null);return Iterators.transform(filtered, LatLong::new);}private void dumpJson(Iterator<LatLong> coordinates, OutputStream output) throws IOException {jsonMapper.writeValue(output, coordinates);}}

摘要(TL; DR)

如果您沒有足夠的耐心執行所有步驟,則可以參考以下三點:

  • 您的首要目標是簡單 。 最初的JAXB實現非常好(進行了少量修改),如果您的代碼不必處理大量輸入,則應保持這種狀態。
  • 針對超大型輸入 (例如,使用生成的InputStream )生成千兆字節的輸入,以測試您的代碼 。 巨大的數據集是邊緣情況的另一個例子。 一次不要手動測試。 一不小心的更改或“改進”可能會破壞您的性能。
  • 優化不是編寫不良代碼的借口 。 注意,我們的實現仍然是可組合的,并且易于遵循。 如果我們通過SAX并簡單地內聯SAX回調中的所有邏輯,則可維護性將受到極大影響。
  • 翻譯自: https://www.javacodegeeks.com/2014/08/testing-code-for-excessively-large-inputs.html

    組織機構代碼輸入測試用例

    總結

    以上是生活随笔為你收集整理的组织机构代码输入测试用例_测试代码以用于过大的输入的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产综合婷婷 | 91在线视频观看 | 国产黄色片网站 | 激情在线网| 又爽又黄又刺激的视频 | 国产精品美女久久久免费 | 欧美日韩高清一区二区三区 | 国产亚洲精品久久久久久移动网络 | 天天射天天射天天射 | 亚洲va综合va国产va中文 | 亚洲一区二区三区在线看 | 国产精品久久免费看 | 天堂av在线免费观看 | 国内外成人在线 | 久久高清毛片 | 亚洲免费色 | 亚洲激情在线 | 国产免费视频一区二区裸体 | 国产精品99久久久 | 玖玖在线看 | 中文字幕电影高清在线观看 | 永久免费精品视频网站 | 国产精品久久片 | 免费观看全黄做爰大片国产 | 国模精品一区二区三区 | 夜夜干天天操 | 免费高清男女打扑克视频 | 嫩草av在线 | 国产尤物一区二区三区 | 国产一区二区在线免费观看 | 美女视频久久 | 丁香5月婷婷久久 | 五月婷婷导航 | 99在线免费视频观看 | www欧美色 | 日韩高清免费在线观看 | 欧美一区二区三区不卡 | 久久久久国产成人精品亚洲午夜 | 97自拍超碰 | 中文字幕精品一区二区精品 | 国产精品一区二区视频 | 国产在线久草 | 97在线免费视频 | 国产成人一区二区三区久久精品 | 99re久久资源最新地址 | 成人aaa毛片 | 国产精品久久久久一区二区三区共 | 国产少妇在线观看 | 91一区二区三区在线观看 | 日本中文字幕系列 | 国产在线最新 | av官网在线| 亚洲成人影音 | 九九热在线视频免费观看 | 色婷婷国产精品一区在线观看 | 日韩最新中文字幕 | 免费午夜av | 中文字幕视频网站 | 人人插人人玩 | 久久免费视频国产 | 91精品视频导航 | 久久久wwww| 欧美视频在线二区 | av中文字幕日韩 | 精品视频免费观看 | 精品在线播放 | 91精品高清| 91亚洲国产成人 | 午夜精品影院 | 精品久久久久久亚洲综合网 | 国产精品久久久久久一二三四五 | 激情伊人五月天久久综合 | 久久久五月婷婷 | 在线黄网站| 欧美日韩中文在线观看 | 国内精品久久久久久久久久久久 | 久久深夜福利免费观看 | 久久资源总站 | 亚洲精品视频中文字幕 | 国产精品久久久 | 国产综合片 | 亚洲天天干 | 午夜精品久久久久久久99 | 久久综合九色综合网站 | 久久久国产精品久久久 | 亚洲一区二区三区四区在线视频 | 国产欧美最新羞羞视频在线观看 | 久草在线免费看视频 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 在线欧美中文字幕 | 四虎永久免费 | 黄色三级久久 | 99久久这里有精品 | 香蕉视频免费看 | 亚洲激情 | 正在播放国产一区二区 | 亚洲免费在线播放视频 | 中文字幕日韩精品有码视频 | 国产伦理精品一区二区 | 91丨精品丨蝌蚪丨白丝jk | 欧美孕交vivoestv另类 | 欧美一级片在线免费观看 | 欧美韩日视频 | www.黄色片网站 | 最新av在线播放 | 精品视频在线免费观看 | 国产视频一 | 欧美激情在线网站 | 91在线精品一区二区 | 成人av资源站 | 亚洲最新在线视频 | 日韩免费观看av | 久久视频在线视频 | av在线官网 | 日韩a级免费视频 | 日本护士三级少妇三级999 | 久久视频在线 | 国产在线视频不卡 | 国内精品久久久久影院男同志 | 91av播放| 欧美精品一区在线发布 | 久久久精品久久 | 最近日本韩国中文字幕 | 手机看片福利 | 精品国产一区二区三区日日嗨 | 国产精品99在线播放 | 免费成人av网站 | 91成人精品观看 | 日韩在线视频国产 | 国产视频色 | 99这里只有 | 视频福利在线观看 | 精品成人在线 | 精品久久久久久亚洲综合网 | 免费视频黄色 | 免费看麻豆 | 日本久久久精品视频 | 日韩精品短视频 | 免费久久网 | 在线黄色国产 | 久久精品4| 四虎在线观看精品视频 | 精品国内自产拍在线观看视频 | 成人免费共享视频 | 久久久性 | 亚洲精品视频免费 | 色网站在线免费观看 | 久久成人免费视频 | 欧美日韩视频观看 | 国产亚洲精品美女久久 | av在线免费播放 | 免费三级骚 | 精品一区二区在线观看 | 精品久久中文 | 中文字幕日本特黄aa毛片 | 97视频在线 | 亚洲在线高清 | 久久久午夜电影 | 91精品视频在线看 | 激情五月激情综合网 | 日韩欧美国产精品 | 在线观看v片 | 成人四虎影院 | 久久免费视频这里只有精品 | 欧美 亚洲 另类 激情 另类 | 国产高清小视频 | 国产精品美女久久久久久久久久久 | www免费网站在线观看 | 国产精品淫片 | 天天天操操操 | 欧美不卡在线 | 国产日产精品一区二区三区四区的观看方式 | 免费观看一级视频 | 国产啊v在线观看 | 日本久久影视 | www.国产高清| 18做爰免费视频网站 | h视频在线看 | 欧美视频日韩 | 91麻豆精品国产自产在线游戏 | 人人玩人人添人人澡97 | 综合色在线观看 | 最新av免费在线观看 | 一区二区三区四区精品 | 五月丁香 | 久久国产一区二区三区 | 亚州性色 | 成人午夜电影免费在线观看 | 亚洲综合成人在线 | 精品免费国产一区二区三区四区 | 国产一区精品在线观看 | 91av观看 | 亚洲日本va在线观看 | 超碰在线最新地址 | 国产精品视频最多的网站 | 外国av网 | 久草免费在线观看 | 91视频这里只有精品 | 久久在线视频在线 | 五月综合激情婷婷 | 免费观看一级成人毛片 | 中文字幕乱码日本亚洲一区二区 | 91桃色免费观看 | 97色噜噜| 天天综合91| 国产日韩在线观看一区 | 免费视频一级片 | 欧美成人理伦片 | 国产高清免费在线观看 | 国产流白浆高潮在线观看 | 特黄特色特刺激视频免费播放 | 特级西西444www大胆高清无视频 | av线上看 | 99国产成+人+综合+亚洲 欧美 | 久久影视网 | 欧美与欧洲交xxxx免费观看 | 免费99精品国产自在在线 | 中文日韩在线 | 二区三区精品 | a级国产毛片 | 成人av在线看 | 日韩av福利在线 | 六月丁香激情综合 | 色综合天天色综合 | 国内精品小视频 | 欧美激情精品久久久 | 激情伊人五月天 | 色a资源在线 | 婷婷六月网 | 欧美性春潮 | 日韩综合视频在线观看 | 丁香五婷 | 成年人免费在线看 | 国产一区二区精品91 | 免费激情在线电影 | 激情小说久久 | 开心综合网 | 中文字幕在线影视资源 | 五月宗合网 | 亚洲精品观看 | www在线观看视频 | 久久久久久久久艹 | 亚洲黄色影院 | 日韩最新理论电影 | 欧美a性| 国产在线精 | 夜夜爽88888免费视频4848 | 伊人网综合在线观看 | 六月丁香色婷婷 | 中文字幕av有码 | 伊色综合久久之综合久久 | 久久国色夜色精品国产 | 欧美日韩在线精品一区二区 | 久久综合久久久久88 | 亚洲一区天堂 | 亚洲天天在线日亚洲洲精 | 青青草视频精品 | 一本一道波多野毛片中文在线 | 久久精品综合网 | 九九视频免费观看视频精品 | 亚洲黄色av网址 | 久草在线手机视频 | 伊人国产视频 | 欧美亚洲另类在线视频 | 久久久久久久久久久网站 | 成人资源在线播放 | 4438全国亚洲精品在线观看视频 | 亚洲精品视频网站在线观看 | 免费a v在线| 久久伊人八月婷婷综合激情 | 久久久精品国产一区二区三区 | 久久久视频在线 | 久久成人资源 | 亚洲狠狠婷婷综合久久久 | 国产精品伦一区二区三区视频 | 免费精品在线 | 丁香婷婷在线观看 | 在线观看自拍 | 免费在线黄网 | 色婷婷骚婷婷 | 成人黄大片 | 国产精品中文在线 | 色老板在线视频 | 国产一级一级国产 | 国产精品久久久久久久久久新婚 | 97超碰人人澡人人爱 | 黄色在线观看www | 婷婷六月综合网 | 91人人射 | 日韩欧美大片免费观看 | 久久亚洲福利视频 | 亚洲丝袜中文 | 久久国产精品影视 | 国产婷婷精品 | 99精品在线视频播放 | 国产丝袜美腿在线 | www.夜夜干.com | 成人国产精品一区 | 在线成人中文字幕 | 国产精品福利午夜在线观看 | 三级黄色网址 | 高清不卡一区二区三区 | 99久久精品免费看国产四区 | 一区二区三区在线视频观看58 | 天天操天天射天天操 | 午夜精品视频在线 | www.日日日.com| 色综合网 | 久久www免费人成看片高清 | 久久久久在线 | 青草草在线视频 | av丝袜在线| 日女人免费视频 | 天天精品视频 | 国产一级视频免费看 | 亚洲欧洲精品一区二区精品久久久 | 日日爱av| 草久久av | 91精品日韩 | 国产国语在线 | 91插插影库 | 国产精品欧美久久久久无广告 | 四虎8848免费高清在线观看 | 精品国产aⅴ麻豆 | 国产精品麻豆99久久久久久 | 色九九视频 | 免费黄色在线网站 | 一区二区丝袜 | 在线免费观看黄色小说 | 色黄久久久久久 | 日韩免费网站 | 色是在线视频 | 三日本三级少妇三级99 | 亚洲一级片在线观看 | 成人在线播放网站 | 欧美二区视频 | 操操操夜夜操 | 国产中文字幕视频 | 日本中文字幕系列 | 婷婷国产v亚洲v欧美久久 | 九色视频自拍 | 国产一区在线免费 | 日韩在线电影一区二区 | 91在线国内视频 | 国产精品久久久久久久久大全 | 91九色视频在线观看 | 91在线视频观看 | 黄色看片 | 成人免费看片网址 | 国产精品精品国产 | 精品人妖videos欧美人妖 | 黄色av一区二区 | 欧美日韩亚洲在线 | 国产精品成人av久久 | 悠悠av资源片 | 色噜噜狠狠色综合中国 | 国产视频在线观看一区二区 | 在线观看麻豆av | 亚洲在线精品 | 黄色免费在线看 | 亚洲一区日韩 | 国产精品一区在线观看你懂的 | 欧美日韩不卡一区 | 亚洲精品在线一区二区 | 天天玩夜夜操 | 久久综合久久综合这里只有精品 | 丰满少妇一级片 | 成人高清在线 | 久久免费观看少妇a级毛片 久久久久成人免费 | 国产91精品高清一区二区三区 | 草免费视频| 色中文字幕在线观看 | 亚洲欧美日韩不卡 | 99精品免费久久久久久久久日本 | 久草免费看 | 片黄色毛片黄色毛片 | 国产91全国探花系列在线播放 | 色网站在线 | 国产美女精品视频 | 中文字幕精品三区 | 丁香婷婷激情啪啪 | 中文字幕在线看视频 | 国产精品免费看久久久8精臀av | 久久av伊人 | 久久成人黄色 | 亚洲精品欧美视频 | 午夜精品视频福利 | 国产高清在线观看 | 日日夜夜网| 国产精品美女免费 | 97超碰中文字幕 | 高清久久久久久 | 91av视频播放 | 国产二区免费视频 | 在线观看色网 | www久久精品 | 日日噜噜噜噜夜夜爽亚洲精品 | 久久96国产精品久久99漫画 | 91九色精品 | 二区三区中文字幕 | 99热在线观看 | 91精品国产99久久久久久久 | 久久久久中文 | 999久久国产 | 欧美精品一区二区免费 | 伊人久久五月天 | 日日夜夜网站 | 91黄色影视 | 探花视频在线观看 | 亚洲综合色视频在线观看 | 激情久久影院 | 亚洲91av| 国产一区二区电影在线观看 | 色婷婷福利 | 久久线视频 | 久久久久免费精品 | 久久免视频 | 国产亚洲精品成人av久久影院 | 欧美激情视频在线免费观看 | 91免费在线 | 一区二区三区在线免费播放 | 91桃色在线播放 | 天天玩天天干 | 国产乱码精品一区二区三区介绍 | 中文字幕视频网站 | 国产精品不卡在线 | www.人人草 | 国产在线国产 | av久久在线 | 国产69精品久久久久9999apgf | 国产91aaa| 国产精品久久久久av免费 | 国产精品一级在线 | 亚洲国产丝袜在线观看 | 日本久久精品 | 欧美日韩免费一区 | 一级α片 | 午夜av免费观看 | 国内精品国产三级国产aⅴ久 | 88av色| 超碰激情在线 | 东方av免费在线观看 | 国产精品一区二区三区免费视频 | 免费黄在线看 | 亚洲女欲精品久久久久久久18 | 免费看一级 | 久久国产欧美日韩精品 | 99视频精品 | 免费在线国产 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 男女激情网址 | 久久久午夜精品理论片中文字幕 | 国产破处在线播放 | 三级av黄色 | 欧美一区成人 | 一区二区伦理 | 国产黄色精品视频 | 日韩久久久久久 | 日本在线成人 | 久草精品视频在线播放 | 国产一区二区精品久久91 | 久久在线免费观看视频 | 青草视频网 | 色综合婷婷久久 | a黄色大片| 国产精品原创在线 | 久草网站在线观看 | 在线观看一区二区精品 | 午夜精选视频 | 国产精品久久久久久久久久直播 | 黄色网中文字幕 | 日日夜夜精品视频 | 九九综合久久 | 香蕉视频18 | 久操中文字幕在线观看 | 夜夜操综合网 | 美女视频久久久 | 在线视频观看亚洲 | 中文字幕在线播放第一页 | 午夜狠狠操 | 久久成人在线视频 | 欧美久久综合 | 天天操天天摸天天爽 | 国产日韩精品欧美 | 人操人| 一区二区三区在线观看免费视频 | 福利av在线 | 国产69精品久久久久99 | 国产亚洲午夜高清国产拍精品 | 日日麻批40分钟视频免费观看 | 亚洲国产视频在线 | 国产精品入口麻豆 | 亚洲欧洲中文日韩久久av乱码 | 久久亚洲二区 | 国产精彩在线视频 | 99 国产精品 | 人人网人人爽 | japanesefreesex中国少妇 | 三级av小说 | av在线中文| 久久999精品| 午夜 免费 | 免费av电影网站 | 伊人六月 | 麻豆视频在线 | 亚洲欧洲精品一区 | 久久综合综合久久综合 | 人人爽人人射 | 亚洲免费视频观看 | 狠狠操夜夜操 | 欧美亚洲一级片 | 国产在线观看av | 亚洲国产精品电影 | 亚洲国产成人精品久久 | 精品中文字幕在线 | 国内成人av| 福利一区二区三区四区 | 欧美亚洲国产日韩 | 亚洲少妇影院 | 天天操天 | 日批网站在线观看 | 久久久久久国产精品 | 久久全国免费视频 | 99久久精品久久久久久清纯 | 亚洲色综合 | 五月色婷 | 久久久国产99久久国产一 | 日韩视频一区二区三区 | 一本一道久久a久久精品蜜桃 | 亚洲一区网 | 午夜国产一区二区 | 久久综合射 | 日韩成人免费电影 | 91免费视频国产 | 亚洲欧美日韩精品久久久 | av黄色亚洲 | 一区二区三区日韩精品 | 中国一级特黄毛片大片久久 | 综合色在线观看 | 中文字幕a∨在线乱码免费看 | 麻豆久久久久久久 | 三级性生活视频 | 国产网红在线观看 | 在线看黄色av | 久久夜色精品国产欧美乱极品 | 正在播放国产一区二区 | 在线播放 日韩专区 | 亚洲91在线 | 中文视频在线 | 中文字幕在线观看一区 | 久久99精品久久久久久秒播蜜臀 | 97超碰中文 | 夜夜操网| 日日夜夜精品网站 | 激情网婷婷 | 日色在线视频 | 91av社区| 99精品视频一区二区 | 99热这里只有精品国产首页 | 操操操影院 | 免费中文字幕在线观看 | 91香蕉嫩草| 日韩中文字幕亚洲一区二区va在线 | 狠狠操在线 | 精品在线观看一区二区三区 | 久久在线视频精品 | 在线免费视频 你懂得 | 国产精品18久久久久久久久久久久 | 久久久免费国产 | 天堂网在线视频 | 亚洲 欧洲 国产 日本 综合 | 国产精品视频全国免费观看 | 91一区二区三区在线观看 | 在线观看视频亚洲 | 91xav | 久香蕉| 免费的成人av| 99婷婷狠狠成为人免费视频 | 97在线观看免费 | 狠狠狠色丁香婷婷综合久久五月 | 97超碰人人网 | 在线久草视频 | 日日麻批40分钟视频免费观看 | 黄色在线观看www | 在线色吧 | 在线一区av | 丁香六月婷婷综合 | 天天操天天干天天 | 日日夜夜天天久久 | 亚洲区另类春色综合小说校园片 | 亚洲第一香蕉视频 | 亚洲精品乱码久久久久久写真 | 韩国一区视频 | 欧美午夜性 | 久久免费看av | 麻豆视频在线免费观看 | 国产亚洲婷婷 | 四虎永久免费网站 | 狠色狠色综合久久 | 国产乱对白刺激视频不卡 | 天天天干 | 国产成人一二片 | 国产午夜精品一区二区三区 | 91超级碰碰 | 日日夜夜狠狠操 | av色综合 | 国产一区二区三区网站 | 久久国产美女 | 国产视频精选在线 | 欧美与欧洲交xxxx免费观看 | 91在线观看视频 | 日韩av一区二区在线播放 | 波多野结依在线观看 | 欧美一区二区在线免费观看 | 精品中文字幕在线播放 | 国产高清不卡一区二区三区 | 中文字幕在线观看国产 | 久久人人爽人人片av | 久久久久久久久久电影 | 在线精品亚洲一区二区 | 亚洲综合在线五月天 | 成人av中文字幕 | 亚洲第一区在线观看 | 在线国产精品视频 | 少妇av片 | 亚洲欧美在线综合 | 国产高清一 | 麻豆手机在线 | 免费看黄20分钟 | 偷拍视频一区 | 一级黄色大片 | 日韩精品一区二区三区丰满 | 懂色av一区二区三区蜜臀 | 亚洲成人家庭影院 | 美女精品在线 | 一本色道久久精品 | 日韩免费av在线 | 日韩成人免费在线 | 97av免费视频 | 久久久久久福利 | 久久草在线精品 | 色人久久 | 国产系列 在线观看 | 日韩欧美高清一区二区 | 一区二区久久久久 | 91在线入口 | 国产精品手机在线观看 | 香蕉免费在线 | 深爱开心激情网 | 欧洲精品视频一区 | 午夜美女网站 | 77国产精品 | www国产亚洲 | 人人澡超碰碰97碰碰碰软件 | 狠狠插天天干 | 日日夜夜免费精品 | 丁香花在线视频观看免费 | 人人超碰人人 | 久久久久久久久久久久久久av | 一区二区理论片 | www.久久爱.cn | 色视频在线观看 | а天堂中文最新一区二区三区 | 欧美日韩首页 | 国产美腿白丝袜足在线av | 24小时日本在线www免费的 | 探花视频在线观看+在线播放 | 日韩在线免费小视频 | 久久婷婷亚洲 | 久久久国产精品网站 | 99av在线视频 | 国产精品一区二区三区电影 | 国产无遮挡又黄又爽在线观看 | 日韩在线观看的 | 91色蜜桃 | 国产免费国产 | 在线 高清 中文字幕 | 一级黄毛片 | 国产国产人免费人成免费视频 | 久久99亚洲网美利坚合众国 | 99精品偷拍视频一区二区三区 | 日韩亚洲在线观看 | 免费在线a | av天天色 | 91av视频网 | 超碰99人人| 亚洲理论影院 | 在线黄色国产 | 久久国产精品精品国产色婷婷 | 国产成人av免费在线观看 | 亚洲国产丝袜在线观看 | 在线免费精品视频 | 96香蕉视频 | 亚洲一区二区观看 | 激情视频国产 | 四虎在线观看网址 | 色综合咪咪久久网 | 国产精品久久在线 | 激情综合色综合久久 | 日韩在线电影一区 | 久久精品视频免费观看 | 国产片免费在线观看视频 | 久久综合给合久久狠狠色 | 视频在线99re | 一区二区精 | 国产黄视频在线观看 | 在线观看一区二区精品 | 97超碰人人澡人人爱 | 精品欧美在线视频 | 999热线在线观看 | 久久综合久久久 | 国产精品不卡在线观看 | 日日夜夜狠狠操 | 日韩性色| 中文字幕中文字幕 | 中文字幕有码在线观看 | 精品爱爱 | 狠狠干免费 | 欧美综合色 | 欧美另类交人妖 | 欧美久久久影院 | 99色视频 | 99视频在线免费观看 | 亚洲一级黄色大片 | www.夜夜爱 | 亚洲精品在 | 亚洲美女视频在线 | 麻豆免费视频 | 久久99国产一区二区三区 | 久久久精品亚洲 | 狠狠躁天天躁综合网 | 91看片淫黄大片在线播放 | 激情深爱五月 | 久久国产区 | 婷婷日日| 国产最新在线 | av在线电影播放 | 日韩精品极品视频 | 日日夜夜狠狠干 | 97成人超碰 | 国产xvideos免费视频播放 | 超碰人人国产 | 久久久久久久久久久成人 | 在线观看成人福利 | 成年人视频在线观看免费 | 欧美日韩一区二区免费在线观看 | 一级一片免费观看 | 中文字幕资源站 | 五月婷婷视频在线 | 91av视频观看 | 久久久免费播放 | 玖玖在线精品 | 国产丝袜网站 | av中文在线观看 | 99欧美精品 | 久久精品亚洲综合专区 | 日韩精品在线一区 | 九九热精品视频在线观看 | 午夜精品一区二区三区在线视频 | 日本精品视频免费 | 国产91成人| 国产精品正在播放 | www.天天射 | 91在线欧美 | 久久久久免费电影 | 亚洲黄色小说网 | 成人久久毛片 | 精品免费在线视频 | 欧美日韩国产在线一区 | 亚洲九九 | 国产福利91精品 | 久久免费福利视频 | 亚洲少妇xxxx| 伊人在线视频 | 天天射天天爽 | 91麻豆视频网站 | 婷五月激情| 毛片888 | 看全黄大色黄大片 | 五月天婷婷丁香花 | 91丨九色丨高潮丰满 | 97精品国产97久久久久久免费 | 欧美日韩中文字幕综合视频 | 免费福利视频导航 | 丁香婷婷成人 | 成人午夜精品福利免费 | 伊人黄色网 | 色综合久久中文字幕综合网 | 久久久噜噜噜久久久 | 黄色a视频免费 | 亚洲欧美日韩国产一区二区三区 | 亚洲精品中文在线 | 一区二区影院 | 超碰在线人人97 | 日日夜夜天天综合 | 日韩精品一区在线观看 | 欧美精品久久久久 | 欧美日韩在线观看一区二区 | 久久久久久久久久久免费 | 久久精品国产免费观看 | 国产精品av在线免费观看 | 日本中文字幕在线电影 | 国内丰满少妇猛烈精品播放 | 久久玖 | 国产精国产精品 | 久草视频免费观 | 欧美va在线观看 | 精品日韩中文字幕 | 亚洲精品成人av在线 | 精品国产免费观看 | a视频在线观看 | 日韩大片在线免费观看 | 天天性天天草 | 久久精品美女视频 | 日本黄网站 | 国产激情小视频在线观看 | 日韩免费视频线观看 | 99在线免费视频 | 九九有精品 | 成人av在线网 | 狠狠色丁香 | 久久av网址 | 三级动态视频在线观看 | 91精品夜夜 | 日本不卡一区二区三区在线观看 | 欧美精品一区二区在线观看 | 182午夜在线观看 | 午夜视频二区 | 久久久国产精品久久久 | 精品亚洲一区二区 | 国产精品久久久久久久久婷婷 | 西西4444www大胆艺术 | 国产专区视频在线 | 日韩精品亚洲专区在线观看 | 精品久久久久免费极品大片 | 亚洲va欧美va人人爽 | 99超碰在线播放 | 成人午夜毛片 | 色狠狠婷婷| 韩国三级在线一区 | 成 人 黄 色 视频播放1 | 欧美巨大荫蒂茸毛毛人妖 | 一区二区三区四区精品视频 | 黄p网站在线观看 | 中文字幕亚洲综合久久五月天色无吗'' | 久久96国产精品久久99软件 | 国产精品一区二区三区视频免费 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 在线免费视频a | 97超碰香蕉| 国产精品99久久久精品免费观看 | 国产精品美女www爽爽爽视频 | 国产1级视频 | 日本午夜免费福利视频 | 欧美性爽爽| 日日爽夜夜爽 | 成人av片免费观看app下载 | 国产人在线成免费视频 | 91伊人影院| www.五月天激情 | 欧美成人日韩 | 婷婷丁香狠狠爱 | 日韩av手机在线看 | 不卡av电影在线观看 | 中文字幕免费久久 | 麻豆视频国产精品 | 日韩美女av在线 | 国产麻豆电影 | 91桃色国产在线播放 | 国产免费观看久久黄 | 日韩av线观看 | 91av手机在线 | 久草在线在线精品观看 | 欧美调教网站 | 中文字幕乱码一区二区 | 天天摸天天操天天爽 | 久久久免费观看视频 | 密桃av在线 | 亚洲最新av网址 | 五月天激情综合 | 黄色精品一区二区 | 超碰97在线资源 | 久久久久国产精品www | 精品久久福利 | 亚洲精品动漫久久久久 | a视频在线 | 中文字幕三区 | 国产一区二区在线精品 | av网站播放| 欧美视频二区 | 香蕉久草在线 | 99国产一区 | 九九视频精品在线 | 九九导航 | 亚洲国产一区二区精品专区 | 欧美日韩亚洲在线观看 | 天天干天天射天天插 | 超碰资源在线 | www亚洲一区 | 免费色婷婷 | 久久久久久国产精品999 | 蜜臀av夜夜澡人人爽人人 | 毛片永久新网址首页 | 九九久久久久久久久激情 | 一区二区三区免费在线 | 永久免费的av电影 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 日韩精品视频免费看 | 人人澡超碰碰97碰碰碰软件 | 91九色视频网站 | 免费看片网址 | 丁香婷婷成人 | 五月天激情综合 | 久久涩视频 | 久久福利综合 | a电影免费看 | 天天操夜夜做 | 亚洲精品视频偷拍 | 四虎影视8848aamm | 久久er99热精品一区二区 | 精品福利在线视频 | 久久久久国产一区二区三区四区 | 欧美一区二区三区免费观看 | 亚洲国产视频在线 | 九九99| 久久久蜜桃一区二区 | 99久久精品日本一区二区免费 | 亚洲免费精彩视频 | 韩日色视频| 91精品一区二区三区蜜臀 | 国产一区二区精 | 黄色福利网站 | 毛片一区二区 | 97操操 | 久久a级片 | 色爽网站 | 黄色电影小说 | 五月婷婷婷婷婷 | 国产精品毛片久久久 | 91视频黄色 | 欧美怡红院视频 | 久久99精品国产99久久6尤 | 亚洲 欧美 精品 | 丰满少妇在线观看 | 亚洲高清视频在线观看 | 国产清纯在线 | 国偷自产中文字幕亚洲手机在线 | 久久视频在线看 | 国产精品三级视频 | 色全色在线资源网 | 久久伊人91 | 狠狠色噜噜狠狠 | 日韩精品2区 | 日韩精品一区二区三区免费观看视频 | 亚洲综合色激情五月 | 国产资源在线视频 | 国产精品九九九九九 | 国产三级av在线 | 在线观看亚洲专区 | 精品国产乱码久久久久久三级人 | 精品久久久久久亚洲综合网 | 色婷婷狠狠五月综合天色拍 | 国产白浆在线观看 | 黄a网| 中文在线字幕免费观看 | 亚洲国产成人av网 | 国产精品成人国产乱 | 91成人在线视频 | 国产精品久久久久永久免费 | 91视频免费看网站 | 天天操天天操一操 | 免费久久网 | 精品国产一区二区三区免费 | 国产麻豆精品久久一二三 | 五月开心色 | 超碰在线97免费 | 69国产盗摄一区二区三区五区 | 国产一级免费视频 | 久久99国产视频 | 91chinesexxx | 中文字幕免费国产精品 | 久久综合五月天 | 特级西西www44高清大胆图片 | 免费av的网站 | 黄色毛片视频 | 久久久久久久久久久精 | 国产精品免费视频网站 | 天天操狠狠操夜夜操 | 国产成人在线免费观看 | 丁香五月亚洲综合在线 | 久久免费福利 | 在线观看亚洲a | 午夜91视频| 日韩欧美一区二区三区黑寡妇 | 日韩精品免费在线观看视频 | 国产成人精品久久二区二区 | 日韩一区二区三免费高清在线观看 | 久久av免费|