Skip to content

Instantly share code, notes, and snippets.

@brweber2
Created April 28, 2016 11:40
Show Gist options
  • Save brweber2/14a3c847650f60fffa9a26784fa0a643 to your computer and use it in GitHub Desktop.
Save brweber2/14a3c847650f60fffa9a26784fa0a643 to your computer and use it in GitHub Desktop.
defmodule JavaClassVersion do
def read_class_file(file) do
file
|> File.read!()
|> java_major_minor()
|> java_version()
|> IO.inspect()
end
def java_major_minor(<<0xCA, 0xFE, 0xBA, 0xBE, # magic word
minor_version :: bytes-size(2),
major_version :: bytes-size(2),
rest :: binary >>) do
{major_version, minor_version}
end
def java_version({<<0x00, 0x34>>, _minor_version}), do: 8
def java_version({<<0x00, 0x33>>, _minor_version}), do: 7
def java_version({<<0x00, 0x32>>, _minor_version}), do: 6
def java_version({<<0x00, 0x31>>, _minor_version}), do: 5
def java_version({<<0x00, 0x30>>, _minor_version}), do: 1.4
def java_version({<<0x00, 0x2F>>, _minor_version}), do: 1.3
def java_version({<<0x00, 0x2E>>, _minor_version}), do: 1.2
def java_version({<<0x00, 0x2D>>, _minor_version}), do: 1.1
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment