src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/mimepull/MemoryData.java

Thu, 31 Aug 2017 15:18:52 +0800

author
aoqi
date
Thu, 31 Aug 2017 15:18:52 +0800
changeset 637
9c07ef4934dd
parent 384
8f2986ff0235
parent 0
373ffda63c9a
permissions
-rw-r--r--

merge

     1 /*
     2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    26 package com.sun.xml.internal.org.jvnet.mimepull;
    28 import java.nio.ByteBuffer;
    29 import java.io.File;
    30 import java.io.IOException;
    31 import java.util.logging.Level;
    32 import java.util.logging.Logger;
    34 /**
    35  * Keeps the Part's partial content data in memory.
    36  *
    37  * @author Kohsuke Kawaguchi
    38  * @author Jitendra Kotamraju
    39  */
    40 final class MemoryData implements Data {
    41     private static final Logger LOGGER = Logger.getLogger(MemoryData.class.getName());
    43     private final byte[] data;
    44     private final int len;
    45     private final MIMEConfig config;
    47     MemoryData(ByteBuffer buf, MIMEConfig config) {
    48         data = buf.array();
    49         len = buf.limit();
    50         this.config = config;
    51     }
    53     // size of the chunk given by the parser
    54     @Override
    55     public int size() {
    56         return len;
    57     }
    59     @Override
    60     public byte[] read() {
    61         return data;
    62     }
    64     @Override
    65     public long writeTo(DataFile file) {
    66         return file.writeTo(data, 0, len);
    67     }
    69     /**
    70      *
    71      * @param dataHead
    72      * @param buf
    73      * @return
    74      */
    75     @Override
    76     public Data createNext(DataHead dataHead, ByteBuffer buf) {
    77         if (!config.isOnlyMemory() && dataHead.inMemory >= config.memoryThreshold) {
    78             try {
    79                 String prefix = config.getTempFilePrefix();
    80                 String suffix = config.getTempFileSuffix();
    81                 File tempFile = TempFiles.createTempFile(prefix, suffix, config.getTempDir());
    82                 // delete the temp file when VM exits as a last resort for file clean up
    83                 tempFile.deleteOnExit();
    84                 if (LOGGER.isLoggable(Level.FINE)) {
    85                     LOGGER.log(Level.FINE, "Created temp file = {0}", tempFile);
    86                 }
    87                 // delete the temp file when VM exits as a last resort for file clean up
    88                 tempFile.deleteOnExit();
    89                 if (LOGGER.isLoggable(Level.FINE)) {LOGGER.log(Level.FINE, "Created temp file = {0}", tempFile);}
    90                 dataHead.dataFile = new DataFile(tempFile);
    91             } catch (IOException ioe) {
    92                 throw new MIMEParsingException(ioe);
    93             }
    95             if (dataHead.head != null) {
    96                 for (Chunk c = dataHead.head; c != null; c = c.next) {
    97                     long pointer = c.data.writeTo(dataHead.dataFile);
    98                     c.data = new FileData(dataHead.dataFile, pointer, len);
    99                 }
   100             }
   101             return new FileData(dataHead.dataFile, buf);
   102         } else {
   103             return new MemoryData(buf, config);
   104         }
   105     }
   107 }

mercurial