rt/vm8/src/test/java/org/apidesign/bck2brwsr/vm8/BytesLoader.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 26 Jun 2014 23:54:17 +0200
branchjdk8
changeset 1639 4b09a4b689a4
permissions -rw-r--r--
Can parse JDK8 generated bytecode
jaroslav@1639
     1
/**
jaroslav@1639
     2
 * Back 2 Browser Bytecode Translator
jaroslav@1639
     3
 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@1639
     4
 *
jaroslav@1639
     5
 * This program is free software: you can redistribute it and/or modify
jaroslav@1639
     6
 * it under the terms of the GNU General Public License as published by
jaroslav@1639
     7
 * the Free Software Foundation, version 2 of the License.
jaroslav@1639
     8
 *
jaroslav@1639
     9
 * This program is distributed in the hope that it will be useful,
jaroslav@1639
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jaroslav@1639
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
jaroslav@1639
    12
 * GNU General Public License for more details.
jaroslav@1639
    13
 *
jaroslav@1639
    14
 * You should have received a copy of the GNU General Public License
jaroslav@1639
    15
 * along with this program. Look for COPYING file in the top folder.
jaroslav@1639
    16
 * If not, see http://opensource.org/licenses/GPL-2.0.
jaroslav@1639
    17
 */
jaroslav@1639
    18
package org.apidesign.bck2brwsr.vm8;
jaroslav@1639
    19
jaroslav@1639
    20
import java.io.IOException;
jaroslav@1639
    21
import java.io.InputStream;
jaroslav@1639
    22
import java.net.URL;
jaroslav@1639
    23
import java.util.Enumeration;
jaroslav@1639
    24
jaroslav@1639
    25
/**
jaroslav@1639
    26
 *
jaroslav@1639
    27
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@1639
    28
 */
jaroslav@1639
    29
public final class BytesLoader {
jaroslav@1639
    30
    public byte[] get(String name) throws IOException {
jaroslav@1639
    31
        byte[] arr = readClass(name);
jaroslav@1639
    32
        /*
jaroslav@1639
    33
        System.err.print("loader['" + name + "'] = [");
jaroslav@1639
    34
        for (int i = 0; i < arr.length; i++) {
jaroslav@1639
    35
        if (i > 0) {
jaroslav@1639
    36
        System.err.print(", ");
jaroslav@1639
    37
        }
jaroslav@1639
    38
        System.err.print(arr[i]);
jaroslav@1639
    39
        }
jaroslav@1639
    40
        System.err.println("]");
jaroslav@1639
    41
         */
jaroslav@1639
    42
        return arr;
jaroslav@1639
    43
    }
jaroslav@1639
    44
jaroslav@1639
    45
    static byte[] readClass(String name) throws IOException {
jaroslav@1639
    46
        URL u = null;
jaroslav@1639
    47
        Enumeration<URL> en = BytesLoader.class.getClassLoader().getResources(name);
jaroslav@1639
    48
        while (en.hasMoreElements()) {
jaroslav@1639
    49
            u = en.nextElement();
jaroslav@1639
    50
        }
jaroslav@1639
    51
        if (u == null) {
jaroslav@1639
    52
            throw new IOException("Can't find " + name);
jaroslav@1639
    53
        }
jaroslav@1639
    54
        try (InputStream is = u.openStream()) {
jaroslav@1639
    55
            byte[] arr;
jaroslav@1639
    56
            arr = new byte[is.available()];
jaroslav@1639
    57
            int offset = 0;
jaroslav@1639
    58
            while (offset < arr.length) {
jaroslav@1639
    59
                int len = is.read(arr, offset, arr.length - offset);
jaroslav@1639
    60
                if (len == -1) {
jaroslav@1639
    61
                    throw new IOException("Can't read " + name);
jaroslav@1639
    62
                }
jaroslav@1639
    63
                offset += len;
jaroslav@1639
    64
            }
jaroslav@1639
    65
            return arr;
jaroslav@1639
    66
        }
jaroslav@1639
    67
    }
jaroslav@1639
    68
    
jaroslav@1639
    69
}