diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp
index 2e1fdbd5..871bb9ae 100644
--- a/single_include/nlohmann/json.hpp
+++ b/single_include/nlohmann/json.hpp
@@ -55,7 +55,6 @@ SOFTWARE.
 #include <memory> // allocator
 #include <string> // string
 #include <vector> // vector
-#include <cstdio>
 
 /*!
 @brief namespace for Niels Lohmann
@@ -2059,6 +2058,7 @@ constexpr const auto& to_json = detail::static_const<detail::to_json_fn>::value;
 #include <string> // string, char_traits
 #include <type_traits> // enable_if, is_base_of, is_pointer, is_integral, remove_pointer
 #include <utility> // pair, declval
+#include <cstdio> //FILE *
 
 // #include <nlohmann/detail/macro_scope.hpp>
 
@@ -2095,6 +2095,27 @@ struct input_adapter_protocol
 /// a type to simplify interfaces
 using input_adapter_t = std::shared_ptr<input_adapter_protocol>;
 
+/*!
+Input adapter for stdio file access. This adapter read only 1 byte and do not use any
+ buffer. This adapter is a very low level adapter. This adapter
+*/
+class file_input_adapter : public input_adapter_protocol
+{
+  public:
+    explicit file_input_adapter(const FILE* file)  noexcept
+        : file(file)
+    {}
+
+    std::char_traits<char>::int_type get_character() noexcept override
+    {
+        return fgetc(const_cast<FILE*>(file));
+    }
+  private:
+    /// the file pointer to read from
+    const FILE* file;
+};
+
+
 /*!
 Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at
 beginning of input. Does not support changing the underlying std::streambuf
@@ -2286,22 +2307,6 @@ struct wide_string_input_helper<WideStringType, 2>
     }
 };
 
-class file_input_adapter : public input_adapter_protocol
-{
-public:
-    explicit file_input_adapter(const FILE *file)  noexcept
-            : file(file)
-    {}
-
-    std::char_traits<char>::int_type get_character() noexcept override
-    {
-        return fgetc(const_cast<FILE *>(file));
-    }
-private:
-    /// the file pointer to read from
-    const FILE * file;
-};
-
 template<typename WideStringType>
 class wide_string_input_adapter : public input_adapter_protocol
 {
@@ -2353,7 +2358,8 @@ class input_adapter
 {
   public:
     // native support
-
+    input_adapter(FILE* file)
+        : ia(std::make_shared<file_input_adapter>(file)) {}
     /// input adapter for input stream
     input_adapter(std::istream& i)
         : ia(std::make_shared<input_stream_adapter>(i)) {}
@@ -2371,9 +2377,6 @@ class input_adapter
     input_adapter(const std::u32string& ws)
         : ia(std::make_shared<wide_string_input_adapter<std::u32string>>(ws)) {}
 
-    input_adapter(const FILE *file)
-        : ia(std::make_shared<file_input_adapter>(file)) {}
-
     /// input adapter for buffer
     template<typename CharT,
              typename std::enable_if<